我想要一個正則表達式來捕獲多個事件到一個組中。作爲一個例子,假設下面的語句:如何將多個子模式捕獲到一個捕獲?
cat | likes her | mat
dog | goes to his | basket
我希望能夠到這句話的每一個部分捕捉到固定位置
array(
0 => cat likes her mat
1 => cat
2 => likes her
3 => mat
)
顯然使用:
$regex = '/(cat|dog)(likes| goes| to| his| her)* (mat|basket)/';
preg_match($regex, "The cat likes her mat", $m);
給:
array(
0 => cat likes her mat
1 => cat
2 => likes
3 => her
4 => mat
)
但是我總是希望$ m的墊子/籃子[3],不管中間有多少單詞匹配。
我已經試過這樣:
$regex = '/(cat|dog)(?:(likes| goes| to| his| her)*) (mat|basket)/';
,試圖阻止多子模式的拍攝,但是這會導致只有第一個字要即捕獲
array(
0 => cat likes her mat
1 => cat
2 => likes
3 => mat
)
有誰知道我怎麼能捕捉短語的整個中間部分(未知數量的病房長度),但仍將其納入預測的輸出中。
btw我不能使用(cat|dog).*?(mat|basket)
,因爲只有在中間允許的指定單詞。
以上只是一個例子,實際使用的每個子模式都有更多的選項。
謝謝。
謝謝。在我的實際使用中,所有'單詞'都是固定長度,並且總是用空格分隔。所以這種模式正是我所需要的。 – 2013-05-12 17:43:07
@IanBack:看到我的編輯,我添加了一個邊界(\ b) – 2013-05-12 17:46:12
@CasimiretHippolyte:你也可以嘗試解決空的中間單詞問題來接受'貓墊'。 – 2013-05-12 17:50:05