2012-03-27 11 views
0

正規表現を書いて、いくつかのHTMLコードにマッチさせようとしましたが、うまく動作しません。私は "wp-caption"の後にその部分に問題があります。正規表現で私の後方参照が機能しないのはなぜですか?

class=(["\'])(?:[\w\s])*?wp-caption[\s\1] 

私が一致するコード:

class="wp-caption" 
class='wp-caption' 
class="wp-caption foo" 
class="foo wp-caption" 

に私は、最初の3つの結果ではなく、第四に一致します。私は\ 1が働いているとは思わない。何かご意見は?

BTdubs私はhttp://regexpal.com/をテスト目的で使用しています。

+1

私は今まで "BTdubs"を見たことがありません。それは楽しいです。 – octern

+0

あなたが正しいです、後ろの参照は括弧の中では機能しません。 – aMarCruz

答えて

0
class=(["\'])(?:[\w\s])*wp-caption[\w\s]*\1 
1

これは後方参照は文字クラス(角括弧[]内のもの)の中から参照することはできませんので、それは働いていない、あまりにも

class\s*=\s*(['"])(?:(?!\1).)*wp-caption(?:(?!\1).)*\1 
0

働くかもしれません。別の答えで言及したように、ルックアヘッドでバックプレッションを使用することもできます。ただし、ルックアヘッドをサポートしていない言語を使用している場合を除きます。

要するに、 (正規表現の実装は、それが実装されている言語に大きく依存しています)

+0

私は先読みについて聞いたこともありません。なぜ、逆参照は最初の3つの例で動作しますか? – BFTrick

+0

@BFTrick正直なところ、なぜ最初の2つで動作するのかわかりません - 私はあなたが使っていると仮定しているJavaScriptを含むいくつかのフレーバーの正規表現にかなり堪能です。最初の2行に一致する可能性がありますが、例の式とコードをregexpal.comに切り貼りして、あなたの例の3行目と一致します。 –

+0

@BFTrick '[\ s \ 1]'基本的には、空白文字(スペース、タブ、CrLfなど)、バックスラッシュ、または文字数字「1」と一致することを意味します。もしあなたが 'wp-caption'を含むクラス属性を特定しようとしていたら、 'wp-caption'の他のクラスを削除し、それらのクラス間の空白にヒットしたために成功しただけです。式を使ってサンプルコードの最初の2行を一致させることはできません。 [ - > 'lookaround'の詳細情報](http://www.regular-expressions.info/lookaround.html) –

関連する問題