1

私はperlと正規表現が初めてなのでlookbehind、以下のコードを使用して式に取り組んでいました:

my $string = "My hello 12 world 13";

say "$1 $2" if ($string =~ m!(?<=hello\s)(\d+)\s(?<=world\s)(\d+)!);

上記のコードを実行しようとすると、後読み expr の 1 つを削除した場合以外は何も出力されません。それは正常に動作します。

したがって、単一の正規表現で複数の後読みを行うことはできませんか。そうであれば、回避策は何ですか。

4

2 に答える 2

3

1 つの式に複数の後読みを含めることができます。

問題は、アサーションの周りを見てテキストの一部が一致しないため、テキストに「世界」がありますが、一致しないことです

2番目の一連の数字の前に「世界」があるかどうかを確認するだけです==>これは真実ではないため、正規表現は失敗します。

あなたができる

(?<=hello\s)(\d+)\s\w+\s(?<=world\s)(\d+)

ここでRegexrを参照してください

regular-expression.infoは正規表現に関する優れた情報源です。ルックアラウンドの説明が理解に役立つかもしれません。

于 2012-09-10T14:10:33.490 に答える