在Perl的重複組,我試圖捕捉字作爲從下面的例子中字符串的標記(總是會有至少一個字):正則表達式:捕獲組(Perl的)
"red" ==> $1 = 'red';
"red|white" ==> $1 = 'red'; $2 = 'white';
"red|white|blue" ==> $1 = 'red'; $2 = 'white'; $3 = 'blue';
etc.
圖案我在這裏看到的是:WORD,後跟n套 「| WORD」[N> = 0]
所以從這,我有:
/(\ W +)((?:\ |) (\ w +)*)/
根據我的理解,它總是與第一個WORD相匹配,如果存在| WORD對,則根據需要多次捕獲它。
這不工作,雖然,我已經試過像幾個版本:
/^(\ w +)(\ |(\ w +))* $/
...我錯過了什麼?
你不能像這樣做。當你重複一個捕獲組時,前一個匹配被新的覆蓋(每次重複)。你爲什麼不使用分割? –
您可以使用Python PyPi正則表達式,.NET Regex(CapureCollection)實現該功能,並且有一個選項可用於獲取Boost正則表達式庫中的捕獲。 –
@WiktorStribiżew:你也可以用Perl正則表達式來實現這一點 - 而不是OP所嘗試的方式。 – ruakh