0

正規表現を使用してパターンを一致させたいのですが、一致にはいくつかの例外が必要です。たとえば、「John Doe」が太字のタグで囲まれている場合、つまり「<b>John Doe」を除いて、「JohnDoe」のすべての出現箇所に一致します</b>

Match: John Doe
Don't match: <b>John Doe</b>

正規表現でこれを実現するにはどうすればよいですか?

明確化:太字のタグの間のすべてを除外したいと思います。この除外されたコンテンツには、さまざまな文字や改行などが含まれている可能性があります。

4

3 に答える 3

1

正規表現の方言でルックアラウンドが許可されている場合は、ネガティブルックビハインドとネガティブルックアヘッドを使用して、そのタスクを実行できます。

(?<!<b>)John Doe(?!<b>)
于 2013-03-15T14:46:51.237 に答える
0

Perlを使用すると、ネガティブルックビハインドを使用できます。

$ echo "<b>John Doe</b>" | perl -ne 'print if /(?<!<b>)John Doe/'

(上記は何も出力しません-一致しません)。

$ echo "John Doe" | perl -ne 'print if /(?<!<b>)John Doe/'
John Doe

(上記の一致)。

シンボル(?<!<b>)はネガティブな後読みです-文字列の後にその中身がない場合(<b>この場合)、文字列は一致します。

于 2013-03-15T14:47:15.633 に答える
0

これにはネガティブルックアラウンドを使用できます。

(?<!<b>)John Doe(?!</b>)

それは一致し<b>John DoeないかJohn Doe</b>、どちらかです。

インスタンスを開始タグと終了タグの両方と一致させたくない場合は、次のようにすることができます。

John Doe(?!(?<=<b>John Doe)</b>)

または少し短い(ただし、理解しにくい-8はの長さですJohn Doe):

 John Doe(?!(?<=<b>.{8})</b>)
于 2013-03-15T14:47:28.817 に答える