Wie kann ich ein Pipe-Zeichen gefolgt von Whitespace und einer anderen Pipe zuordnen?

8

Ich versuche alle Übereinstimmungen in einer Zeichenfolge zu finden, die mit | | beginnt.

Ich habe versucht: if ($line =~ m/^\\|\s\\|/) was nicht funktioniert hat.

Irgendwelche Ideen?

    
ᴍᴀᴛᴛ ʙᴀᴋᴇʀ 08.10.2008, 13:07
quelle

5 Antworten

25

Du entkommst der Pipe ein Mal zu viel und entkommst stattdessen effektiv dem Backslash.

%Vor%     
Vinko Vrsalovic 08.10.2008 13:09
quelle
5

Pipe-Zeichen sollten in einem Perl-Regex mit einem einzelnen Backslash versehen werden. (Perl-Regexes unterscheiden sich ein wenig von den POSIX-Regexes. Wenn Sie das beispielsweise in Grep verwenden, würden die Dinge ein bisschen anders sein.) Wenn Sie speziell nach einem Leerzeichen zwischen ihnen suchen, verwenden Sie einen entkapselten Bereich. Sie sind in einem Perl-Regex durchaus akzeptabel. Hier ist ein kurzes Testprogramm:

%Vor%     
Dan 08.10.2008 15:04
quelle
3

Wenn es sich um eine literale Zeichenfolge handelt, nach der Sie suchen, brauchen Sie keinen regulären Ausdruck.

%Vor%

Oder es könnte klarer sein, dies zu tun:

%Vor%

Sie können sich auch quotemeta ansehen, wenn Sie ein Literal in einem Regexp verwenden möchten.

    
Kyle 08.10.2008 15:09
quelle
0

Entfernen Sie die ^ und die doppelten Backslashes. Das ^ erzwingt, dass die Zeichenfolge am Anfang der Zeichenfolge steht. Da Sie alle Übereinstimmungen in einer Zeichenfolge suchen, ist das wahrscheinlich nicht das, was Sie wollen.

%Vor%     
Mathieu Longtin 07.04.2009 18:28
quelle
-1

Was ist mit:

%Vor%     
Zsolt Botykai 08.10.2008 13:12
quelle

Tags und Links