← Back to team overview

sslug-teknik team mailing list archive

Regular expression til ektraktion af "quoted strings"

 

Hej sslug'er

Jeg vil gerne kunne ekstrahere alle tekst-strenge fra nogle c-filer.

Da strengene kan indeholde escapede tegn, er det ikke bare at matche enhver tekst der starter med " og slutter med "
Jeg vil således gerne matche tekster som fx:
1)
"test\"sss\"fgsfsdf\"\"gs"
og
2)
"test\"sss\\fgsfsdf\"\"gs"

Jeg har forsøgt at skrive et renerelt regulært udtryk som:
(Anvender GRegex fra glib der anvender PCRE - Perl Compatible Regular Expressions)

"(?<string>\"[^\\\"]*(?:\\.[^\\\"]*)*\")"

Ved at køre udtrykket på strengene, fås match som:
1)
"test\"
"fgsfsdf\"
"gs"
men ikke hele strengen!

2)
"test\"
"\"

På en eller anden vis synes der at være .(dot), der ikke matcher som forventet.

Jeg har også prøvet noget tilsvarende i Emacs og der lykkes det heller ikke.
Emacs variant: \(\"[^\\\"]*(\\.[^\\\"]*)*\"\)
(Matcher faktisk intet i de to viste strenge.)

Er der nogen der kan vise mig et regulært udtryk der gør det jeg ønsker?
(Og gerne evt. forklare hvorfor det udtryk jeg har skrevet ikke virker.)

Med venlig hilsen
Egon Andersen


Follow ups