看看下面的例子,有沒有辦法在preg_match_all()中移動/重置搜索指針?
preg_match_all("/(^|-)[a-z]+(-|$)/i", "foo-bar-moo", $matches);
這(正確)返回下面的比賽,
foo-
-moo
但是,我需要生成以下匹配輸出,
foo-
-bar-
-moo
有其實是一種方法來做到這一點?比如說在比賽結束後將搜索指針移回一個字符?
我唯一的想法是把它放在一個while()
循環中,刪除每個循環上的匹配,直到找到所有匹配。
謝謝。
編輯:我試圖簡化我的問題,使問題更清晰,但這樣做我似乎已經歪曲了什麼我的問題實際上是。道歉。
基本上我需要一種方法來匹配一個字符串中的一個單詞,其中緊接着的字符或緊隨其後的字符是某個字符,但同時不會捕獲匹配中的這些前導和尾隨字符。
我的印象是你無法做到這一點,所以我決定捕捉前/後的字符,並自己刪除它們。這導致了我上面的問題。
正如Tim Pietzcker指出的那樣,我實際上需要的是lookarounds。
因此,對於我上面的例子中,解決方法如下,
preg_match_all('/(?<=^|-)[a-z]+(?=-|$)/', "foo-bar-moo", $result);
的答案和幫助
,並將其輸出,再
foo
bar
moo
感謝。
你可以讓連字符可選(我認爲這是語法)? ?(^ | - )A-Z] +( - | $)? –
不行,我需要拿起'-'纔可以。 –