Wenn Sie einen negative lookbehind assertion, dh für ‚KEYWORD‘ suchen, nicht durch eine bestimmte Zeichenfolge (in Ihrem Fall die vorangestellt ist Start-of- Linienmarkierung ^
):
if ($line =~/(?<!^)KEYWORD:/x) {
# found KEYWORD in '$line', but not at the beginning
print $line, "\n";
}
Output:
hello this is me. KEYWORD: blah
Update: Wie in den Kommentaren erwähnt, der /x
Modifikator in meinem ersten Regex nicht notwendig ist, kann aber verwendet wird das Muster besser lesbar zu machen. Es ermöglicht Leerzeichen (einschließlich Zeilenumbrüche) und/oder Kommentare im Muster, um die Lesbarkeit zu verbessern. Der Nachteil ist, dass jedes Leerzeichen/Leerstelle im aktuellen Muster maskiert werden muss (um es von den Kommentaren zu unterscheiden), aber wir haben diese hier nicht. Das Muster kann somit neu geschrieben werden wie folgt (das Ergebnis ist das gleiche):
if ($line =~/(?<! # huh? (?) ahh, look left (<) for something
# NOT (!) appearing on the left.
^) # oh, ok, I got it, there must be no '^' on the left
KEYWORD: # but the string 'KEYWORD:' should come then
/x) {
# found KEYWORD in '$line', but not at the beginning
print $line, "\n";
}
Was ist der Unterschied zwischen Beispiel 2 und dem _PS: Schließlich möchte ich, dass Beispiel 1 'KEYWORD: blah'_ ist (außer" Apfel "vs." Blah ")? – PerlDuck
Ich stimme @PerlDog zu, Ihrem letzten Kommentar * "PS Ich möchte, dass Beispiel 1 KEYWORD ist: blah" * ist eher kryptisch. Vielleicht, was Sie suchen, ist 's /.+(?= KEYWORD) //'? – Borodin