【发布时间】:2017-11-03 20:05:05
【问题描述】:
假设我们有以下字符串:
终结者1终结者2终结者3:终结者4
以及只保存 Terminator3 的给定正则表达式
(\w+)(?=:)
我必须如何将前 3 个终止符保存在一个字符串中,因为 php 的 preg_match 只提供将结果保存为数组?我正在考虑使用implode() 作为粘合所有单词的唯一选择...
示例结果:
var_dump($terminators);
array(3) {
[0]=>
string(11) "Terminator1"
[1]=>
string(11) "Terminator2"
[2]=>
string(11) "Terminator3"
}
提前致谢
【问题讨论】:
-
好的,但你是指代码中的
Terminators,还是anywordhere文字,还是即将消灭我们的终结者? :)(抱歉无法抗拒)...您的编辑更清楚。谢谢! -
试试
\G\s*\K\w+(?=(?:\s+\w+)*:)。(?=(?:\s+\w+)*:)将确保在一些空格分隔的单词之后有一个:。如果单词之间可以有任何非单词字符,请使用\G\W*\K\w+(?=(?:\W+\w+)*:)。好吧,您可以分两步完成所有这些操作:1) 抓取:之前的所有单词,然后 2)explode如果它们之间总是有空格。 -
那么,有什么工作正常吗? 2-step suggestion demo.
-
如果你只想从字符串的开头匹配,是的。如果没有这种需要,那就没有。然后
\w+(?=(?:\s+\w+)*:)就可以了。看看如果您没有从一开始就定义确切的要求会发生什么。
标签: php regex preg-match pcre