4
假設以下字符串:正則表達式可選重複組
some text here [baz|foo] and here [foo|bar|baz] and even here [option].
我已經成功地得到由這個醜陋的正則表達式(Regex101.com demo)僅匹配:
/(?:
\[
(?:
\|?
([^\|\[\]]+)
)?
(?:
\|?
([^\|\[\]]+)
)?
(?:
\|?
([^\|\[\]]+)
)?
\]
)/ugx
的一點是,我需要匹配用方括號分組。 所以目前我確實有結果,我需要:
[
{
"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托架內的所有選項相匹配?
你可以用拉'preg_replace_callback'然後''爆炸[]'之間的所有值|'。 – chris85
使用PCRE樣式引擎,您只會獲得捕獲組的固定匹配。如果您量化更大組中的捕獲組,則捕獲組如果可以再次匹配則會被覆蓋。這在Dot-Net中不是問題。所以你可以按照chris85提到的方式來完成,或者你可以使用'\ G'構造來挑選括號內的單個值(每個匹配1個)。 – sln
@ chris85當然,可以這樣做。但我想從正則表達式輸出中獲得所有的值。 –