0

PCRE 正規表現で照合する順序を設定するにはどうすればよいですか?

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

4

2 に答える 2

3

を使用して名前で文字列を抽出できます

(?<name>\w+)

で値を取得します

pcre_get_named_substring
于 2009-06-02T07:06:53.143 に答える
1

両方の部分を同じサブパターン ( など\w+) で一致させている場合は、うまくいきません。しかし、サブパターンが明確に異なる場合、いくつかの選択肢がありますが、どれもあまりきれいではありません。以下は、条件構造を使用して、HTML スクリプト要素の属性srcと属性をいずれかの順序で照合する正規表現です。type

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

(免責事項: この正規表現は多くの非現実的な仮定を行っています。その中でも主なものは、両方の属性が存在し、それらが互いに隣接しているというものです。テクニックを説明するためにのみ使用しています。)

src属性が最初に表示される場合、srcとのtype値はそれぞれ 1 番目と 2 番目のグループに取り込まれます。それ以外の場合は、それぞれ 4 番目と 3 番目のグループに表示されます。名前付きグループを使用すると、特に .NET 正規表現のように複数の場所で同じ名前を使用できる場合、追跡が容易になります。残念ながら、PCRE ではすべての名前付きグループに一意の名前を付ける必要がありますが、これは残念なことです。これは非常に優れた機能です。

于 2009-06-02T13:26:05.153 に答える