$rrstring =~ s/^((?:[^\n";]+|"(?:[^\n"\\]|\\[^\n])*")*);[^\n]*$/$1/mg;
^
was missing
I also disagree with you assertion that the patch won't allow backslashed quotes within TXT RDATA.
It completely ignores backslashes, so I knew there was a problem. I was only wrong in how it fails. Your patch does allow backslashes, but it incorrectly finds the end of the quoted string.
Here's a string where it fails to work:
# Here's the simplest case where it fails:
# $expect = "\"Joe\"";
# $rdata = $expect . " ; \"comment\"";
$expect = "\"John \\\"The Wiz\\\" Doe; programmer\"";
$rdata = $expect . " ; \"comment\"";
print("Input: ", $rdata, $/);
print("Expect: ", $expect, $/);
if(($rdata)=~m[;]) {
if(($rdata)=~m[^(".*")($|\s*;)]) {
$rdata = $1;
} else {
($rdata)=~s/;.*//g;
}
}
print("Get: ", $rdata, $/);
__END__
output
======
Input: "John \"The Wiz\" Doe; programmer" ; "comment"
Expect: "John \"The Wiz\" Doe; programmer"
Get: "John \"The Wiz\" Doe; programmer" ; "comment"
btw, the /g in ($rdata)=~s/;.*//g; is not necessary.
|