([^\s]+(?=\.(jpg|jpeg|png|gif))\.\2)
そしてこれ:
([^\s]+(?=\.(jpg|jpeg|png|gif))\.\1)
そして、それはどのように一致しますか?開始部分が空白を取り除くと確信しています..またはそうですか?
ありがとう。
([^\s]+(?=\.(jpg|jpeg|png|gif))\.\2)
そしてこれ:
([^\s]+(?=\.(jpg|jpeg|png|gif))\.\1)
そして、それはどのように一致しますか?開始部分が空白を取り除くと確信しています..またはそうですか?
ありがとう。
これら 2 つはひどい正規表現です。どこで見つけましたか?
まず、 の代わりに、単純に(= 1 つまたは複数の非空白文字)[^\s]+と書くことができます。\S+
2 番目の部分(?=\.(jpg|jpeg|png|gif))は、文字列の前方を調べて、文字列の次の部分がドットであり、その後にリストされているグラフィックス ファイル名拡張子の 1 つが続くことを確認します。
次に、\.\2まったく同じテキストに一致するため、前の先読みアサーションは完全に無意味になります。\2は、キャプチャ括弧の 2 番目のペア ( の周りのものjpg|jpeg|png|gif) の内容を参照します。
したがって、最初の正規表現は次のように書き直すことができます。
\S+\.(jpe?g|png|gif)
\12番目のものは、正規表現全体を(完全に無用に)囲む最初の括弧のセットの内容を参照するため、一致することはありません(すべてではないにしても、ほとんどのコンパイラが咳をして死にます) 。もちろん、マッチ全体をそれ自体の一部として含めることはできません。
[^\s]+- 空白以外の 1 つ以上の文字に一致します。(?=\.(jpg|jpeg|png|gif)- ゼロ幅 (入力を消費しないことを意味する) の正の先読み。上記の式の後に、ドット ( ) があり、その後に 4 つの画像拡張子が続くことをアサートします。\.\.\2- ドットに一致し、その後に 2 番目にキャプチャされたグループである(jpg|jpeg|png|gif).要するに、([^\s]+(?=\.(jpg|jpeg|png|gif))\.\2)は 1 つ以上の非空白文字 (おそらくファイル名) に一致し、その後に次の拡張子のいずれかが続きます: .jpg、.jpeg、.png、または.gif.
2 つ目も基本的には同じですが、\1キャプチャしたテキスト全体を参照するため、何にも一致しません。