2016-09-06 7 views
1

は、文字列 「/ PDF /」が含まれて任意のURLと一致する私たちのプロジェクトでは正規表現を持っている:それはしないように1つの文字列を含む文字列のための正規表現ではなく、別の

(.+)/pdf/.+ 

は、それを変更する必要がありますまた、 "ヘルプ"

例が含まれている試合のURL:

が一致しないでください。 "/dealer/help/us/en/pdf/simple.pdf" 一致する必要があります:「/ディーラー/私たち/ EN /pdf/simple.pdf "

+0

どのような言語、正規表現のスタイル、どのコードを使って一致させるのですか? –

+0

値は、Perl5スタイルの正規表現にすることができます。 –

+0

"/ pdf /"の後に "ヘルプ"を表示できますか?もしそうなら、 "/dealer/us/en/pdf/help.pdf"と一致するはずですか? –

答えて

1

前後参照がサポートされている場合は、これを達成するのは非常に簡単です:

(?=.*/pdf/)(?!.*help)(.+) 

a demo on regex101.comを参照してください。

0
(?:^|\s)((?:[^h ]|h(?!elp))+\/pdf\/\S*)(?:$|\s) 

まず最初は、我々はその背後にあるelp、一つ以上を持っていないまたはh OR任意のhないものと一致し、一致スペースまたは

(?:^|\s) 

そして、行の先頭のどちらかであります時間+/pdf/が見つかるまで、空白以外の文字\Sと任意の回数*をマッチさせます。我々は/pdf/helpを検出したい場合は

((?:[^h ]|h(?!elp))+\/pdf\/\S*) 

は、我々は最初からマッチングを複製することができます。

((?:[^h ]|h(?!elp))+\/pdf\/(?:[^h ]|h(?!elp))+) 

最後に、我々はまたは終了行/列($

(?:$|\s) 

完全一致が/先頭の末尾のスペースを、ストリッピングされなければならない含まれると一致します。キャプチャグループ1を使用する場合は、両端を取り除く必要はありません。

Example on regex101

+0

これは非常に複雑で実現可能です**遠く* * easy :) – Jan

+0

@Janこれは、行全体を照合するのではなく、ただちに使用できるキャプチャグループを与えます。また、これにより、テキストに埋め込まれたURL、または改行で区切られていないURLのリストと照合することができます。 – TemporalWolf

関連する問題