Frage
Wie kann ich die drei Worte in der folgenden Zeichenfolge mit einem Perl-kompatibelen regulären Ausdruck?
word1 # $ word2 # $ word3
Ich weiß nicht, die tatsächlichen Worte „word1, word2 und word3“ im Voraus. Ich weiß nur, den Separator, der # $ ist.
Und ich kann nicht die Wortgrenze verwenden, wie ich eine Mehrbyte-Kodierung haben. Dies bedeutet beispielsweise, dass die Zeichenkette nicht-ASCII-Zeichen wie Umlaute enthalten kann, die durch die \ w Steuerzeichen erkannt werden, nicht.
Lösung
Versuchen Sie, diesen regulären Ausdruck:
/(\w+)#\$(\w+)#\$(\w+)/
Bearbeiten Nach dem uns mit mehr Informationen zur Verfügung gestellt (siehe die Kommentare zu dieser Antwort):
/((?:[^#]+|#[^$])*)#\$((?:[^#]+|#[^$])*)#\$((?:[^#]+|#[^$])*)/
Andere Tipps
#!/usr/bin/perl
use strict;
use warnings;
my $x = 'word1#$word2#$word3';
print $_, "\n" for split /#\$/, $x;
$str = explode('#$', $str);
Regex ist viel des Guten für diese.
Eine Split-Funktion kann nützlich sein, obwohl es was ab, die Sie mit der Linie tun wollen.
Hier ist ein Beispiel though.
my $line = "word1#$word2#$word3"
my @words = split('#$', $line)
Dies ist für jede Zeichenfolge arbeiten, die 2 #
hat
/([^#]+)\#\$([^#]+)\#\$([^#]+)/
/([^#]*?)#\$([^#]*?)#\$([^#]*)/