2016-10-06 2 views
2

pqrをregexを使用して文字列から除外します。私は現在持っている何正規表現否定の先読みを使用して正確な文字列を除外します

は、これは正しくabc/pqr/xyz拒否

abc\/(?!.*pqr).*\/xyz 

ですが、それはまた、私はそれを一致させたいabc/pqrst/xyzを拒否します。

は、完全な単語の場合にのみ除外し、それがpqrstなどの長い単語の部分文字列でない場合は除外します。

+1

全単語 'pqr'? '\ b'を前後に追加してください。 'abc \ /(?!。* \ bpqr \ b)。* \/xyz'。 https://regex101.com/r/HjJBBH/1 –

+0

ありがとうウィクショーを参照してください。今働いています:) –

+0

[Regex - 単一単語を除外する方法の可能な複製?](http://stackoverflow.com/questions/7820930/regex-how-to-exclude-single-word) – revo

答えて

0

あなたは先読みの内側にあることpqrword boundariesを使用することがあります。

abc\/(?!.*\bpqr\b).*\/xyz 
      ^^ ^^ 

regex demoを参照してください。単語境界を使用しない場合は、pqrは正規表現に失敗し、単語境界を追加すると、一致するものだけが失敗し、pqrが全体の単語として表示されます。

代替は、特定のコンテキストでpqrを一致させることです。

abc\/(?!(?:.*\/)?pqr\/).*\/xyz 

another demoを参照してください。ここでは、(?!(?:.*\/)?pqr\/)は、abc/の後に一致するか、またはabcの後に0+最後の/までの任意の文字と、その後に別の/の後にのみ一致します。他のすべての状況では、あなたは一致します。

注:同じアプローチがxyzに適用されなければならない、それは全体の単語xyzに一致するようにした後、(あなたが\bを追加することが

注2:abc\/(?!(?:(?!\/xyz).)*\bpqr\b).*\/xyzを使用し、xyzの前に表示されるようにpqrを必要とするように

+0

質問を重複して頻繁に閉じます。あなたは何十億回前に尋ねられたこの答えになぜ答えましたか? – revo

+0

ここでは単語境界だけでは解決できません。質問は実際に言葉の境界ではありません。批判する前に注意深く読んでください。また、ここでは "use' \ b' "よりもはるかに多くのことが言えます。 –

+0

正規表現で '\ * * 'ではなく'。* 'が使用されている場合、有効な値が' pqr'で始まり '\ W'で何かが始まる可能性はありますか? – Rawling

0

A。また

abc\/(?!.*pqr\/).*\/xyz 

:簡単なチェックはちょうどあなたがその時点でpqr/を持っていないことを確認することです(?!.*.*は、あなたがabc/defpqr/xyzを受け入れることを止めることに注意してください。あなたはそれがあなたが望むものだと確信していますか?

関連する問題