【发布时间】:2011-06-30 19:28:51
【问题描述】:
举个例子,
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]+(-|$)?
-
不行,如果匹配,我需要获取
-'s。