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.

War es hilfreich?

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

/([^#]+)\#\$([^#]+)\#\$([^#]+)/
/([^#]*?)#\$([^#]*?)#\$([^#]*)/
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top