Der obige Poster, der die Verwendung des "m"-Flags im regulären Ausdruck empfohlen hat, hat Recht, aber die bereitgestellte Regex wird nicht ganz funktionieren. Wenn Sie sagen:
$wholeText =~ s/\"(.*)\"/$1/m; #extract the string, removed the quotes
...der reguläre Ausdruck ist zu "gierig", d.h. der (.*) Teil verschlingt zu viel Text. Wenn Sie ein Beispiel wie dieses haben:
"The quick brown fox," he said, "jumped over the lazy dog."
...dann wird die obige Regex alles von "The" bis "dog." erfassen, was wahrscheinlich nicht das ist, was Sie beabsichtigen. Es gibt zwei Möglichkeiten, die Regex weniger gierig zu machen. Welche davon besser ist, hängt ganz davon ab, wie Sie mit zusätzlichen " Markierungen in Ihrer Zeichenkette umgehen wollen.
Erstens:
$wholeText =~ s/\"([^"]*)\"/$1/m;
Zwei:
$wholeText =~ s/\"(.*?)\"/$1/m;
In One sagt die Regex: "Beginne mit quote, dann finde alles, was kein quote ist und merke es dir, bis du ein anderes quote siehst." In Zwei sagt die Regex: "Beginne mit quote, dann suche alles, bis du ein anderes Zitat findest." Das zusätzliche ? innerhalb des ( ) sagt dem Regex-Prozessor, dass er nicht gierig sein soll. Ohne Berücksichtigung der Anführungszeichen innerhalb der Zeichenkette sollten sich beide regulären Ausdrücke gleich verhalten.
Dies ist übrigens ein klassisches Problem beim Parsen einer CSV-Datei ("Comma Separated Values"), so dass es hilfreich sein kann, einige Referenzen dazu nachzuschlagen.
2 Stimmen
Ein schneller Weg, um weniger als Noob zu erscheinen: die Sprache korrekt als Perl bezeichnen.
0 Stimmen
Danke, aber ich bin sehr verwirrt, weil mir jemand sagte, ich solle PERL statt Perl verwenden.
0 Stimmen
Irgendein Typ hat sich geirrt - es ist Perl.
1 Stimmen
Was ist der Unterschied zu diesem Thema? stackoverflow.com/questions/1479565/
0 Stimmen
@Manni: Es ist nicht anders. Für "schließen" gestimmt.
0 Stimmen
Yup Jungs, seine anders, weil ich gerade eine Lösung für mein Problem in meiner vorherigen Frage für alle Zeilen, die von Anführungszeichen eingeschlossen wurde extrahieren gefunden. Und jetzt mein Problem ist, wie man die Zeichenfolge zu extrahieren oder das Entfernen der doppelten Anführungszeichen mit Zeilenumbruch Zeichen.
0 Stimmen
@Sasayins: Wenn Sie in Ihrem früheren Thread geblieben wären, wäre die Sache viel einfacher gewesen. Für welche Lösung haben Sie sich entschieden? Wenn Sie uns Bescheid geben, können wir Ihnen besser zeigen, wie Sie die Anführungszeichen und den letzten (?) Zeilenumbruch entfernen können. Das sollte nicht sehr schwer sein, wenn Sie eine der dortigen Antworten verwenden.
0 Stimmen
Ich habe die Lösung von Mr. Sinan verwendet, die in jeder Zeile überprüft, ob das letzte Zeichen ein Anführungszeichen ist. Dann entfernen Sie, dass 2 doppelte Anführungszeichen und Push-String zu einem Array.