次の文字列と仮定します。ポイントは、私が必要だということです正規表現オプションの繰り返しのグループ
/(?:
\[
(?:
\|?
([^\|\[\]]+)
)?
(?:
\|?
([^\|\[\]]+)
)?
(?:
\|?
([^\|\[\]]+)
)?
\]
)/ugx
:私はこれだけ醜い正規表現(Regex101.com demo)でマッチを取得するために管理してきました
some text here [baz|foo] and here [foo|bar|baz] and even here [option].
をマッチは角括弧でグループ化されます。
[
{
"match": 1,
"children": [
{
"group": 1,
"start": 16,
"end": 19,
"value": "baz"
},
{
"group": 2,
"start": 20,
"end": 23,
"value": "foo"
}
]
},
{
"match": 2,
"children": [
{
"group": 1,
"start": 35,
"end": 38,
"value": "foo"
},
{
"group": 2,
"start": 39,
"end": 42,
"value": "bar"
},
{
"group": 3,
"start": 43,
"end": 46,
"value": "baz"
}
]
},
{
"match": 3,
"children": [
{
"group": 1,
"start": 63,
"end": 69,
"value": "option"
}
]
}
]
結果が正しいですが、その正規表現は、パターン内のブロックの繰り返しの数に制限されています だから現在私は、私は必要な結果を持っています。 sqare brackets内のすべてのオプションに一致する回避策がありますか?
あなたは '[]' preg_replace_callback' 'との間のすべての値は、その後'爆発引っ張る可能性| '。 – chris85
PCREスタイルエンジンを使用すると、キャプチャグループの固定マッチだけが得られます。大きなグループ内のキャプチャグループを数量化すると、再び一致する可能性がある場合、キャプチャグループは上書きされます。これはDot-Netの問題ではありません。ですから、chris85が言及するようにするか、 '\ G'構文を使用して括弧の中の個々の値(1つの一致につき1つ)を選ぶことができます。 – sln
@ chris85確かに、そうすることができます。しかし、私は正規表現の出力からすべての値を取得したいと思います。 –