2016-10-08 26 views
2

「:」を持たない文字列からリンクを切り離し、「.jpg」または「.svg」で終わらず、「/ wiki /」で始まります。なぜこの正規表現は機能しませんか?

したがって、これらは間違っている -

"https://boomerrang.com" 
"/wiki/sbsbs:kjanw" 
"/wiki/aswaa:asawsa.jpg" 
"/wiki/awssa.random.jpg" 
"/wiki/boom.jpg" 

最終的な結果は以下のようになりますどのように - 私が試した何

"/wiki/justthis" 

-

r'^/wiki/.*[^:](?!jpg|svg)$' 

しかし、そのが正しく評価されていません、私が欲しくないすべての結果を与えているのだから... regexに新しいので、なぜこれが動作していないと私はそれを修正する必要があります私に教えてください。

おかげで

+0

最終結果はどのように見えるのですか? – RomanPerekhrest

答えて

2

なぜあなたのパターンは動作しません:.*はそれを一致させることができますので、

.*[^:]は、文字列中に存在することが:を防ぐことはできません。

(?!jpg|svg)$文字列の末尾に「jpg」または「svg」が付いていないと言われているので意味がありません。明らかに、文字列の最後に何も続くことはない。前後参照(先読みまたは戻り読み)ことを覚えておいてください、^などのアンカー、$またはワード境界\bゼロ幅アサーションであり、文字を消費しないので、(?!jpg|svg)$は、文字列内の同じ位置からテストしています。

あなたはそれを試すことができます。

r'^/wiki/[^:]*(?<!\.jpg)(?<!\.svg)$' 

2つの負のlookbehinds末尾に文字列が.svgまたは.jpgで終わっていないことを確認してください。

[^:]*は、文字列内の:を回避します。

+0

うわー、これは魅力のように働いた、これを簡単に説明できますか?そしてコメントの提案とは対照的に、実際にスラッシュから脱出する必要はありませんか? – numpy

+0

@numpy:現在のページをリフレッシュしましたか?具体的に何についてもっと情報が必要ですか? –

+0

@numpyここにその正規表現を貼り付けることをお勧めします:http://regex101.comそしてあなたはそれぞれのことが何をしているのかを解説します。 – idjaw

関連する問題