2009-06-02 6 views
0

PCRE正規表現のものと一致する順序を設定するにはどうすればよいですか?PCREの一致順

私は、文字列から2つの値を抽出して2つの文字列に格納するために使用する、ユーザーが指定できる動的正規表現を持っています。しかし、2つの値が逆の順序で文字列に入ることがあるので、最初の文字列(\ w +)などは2番目の文字列に格納する必要があります。あなたは

(?<name>\w+) 

を使用して、名前で文字列を抽出します(\w+のように)同じサブパターンとの両方の部分に一致している場合

pcre_get_named_substring 
+1

いくつかの例を挙げることができますか? – DrAl

答えて

3

、あなたがしています運が悪い。しかし、サブパターンがはっきりと異なる場合、いくつかの選択肢がありますが、どれも非常にきれいです。

\b(?(?=src=) 
    src="([^"]*)"\s+type="([^"]*)"| 
    type="([^"]*)"\s+src="([^"]*)" 
) 

(免責事項:この正規表現は、多くの非現実的な仮定をし、両方の属性が存在することをそれらの間のチーフここ順序のいずれかにHTMLのscript要素のsrctype属性を一致させるために、条件付き構文を使用して正規表現ですsrc属性が最初に表示された場合は、それらが互いに隣接でしょう。私は唯一の技術を説明するためにそれを使用しています。)

ということは、srctype値は、それぞれ第1および第2のグループにキャプチャされます。それ以外の場合は、それぞれ4番目と3番目のグループに表示されます。名前付きグループは、特に.NETの正規表現でできるように、複数の場所で同じ名前を使用できる場合は、物事を追跡しやすくなります。残念ながら、PCREはすべての名前付きグループに一意の名前を付ける必要があります。それは非常に素晴らしい機能です。

+0

しかし、どの名前をどの部分文字列に割り当てるのかはどのように分かっていますか?これにより、どのグループがどの部分文字列にマッチしたかを把握するという実際の問題を解決することができなくなります。 –

1

で値を得ることができます

関連する問題