我有PHP应用程序,我想得到字符串" word"接下来是另一个字。它后面可以跟另一个字符串。
我希望始终获得" ok" 状态。该怎么做?
我有:
preg_match('~status:\s(.*)(?=\s.*)?~', $text, $matches);
但是会在状态后返回所有内容:。
答案 0 :(得分:2)
答案 1 :(得分:2)
您可以将(.*)
替换为(\w*)
:
preg_match('~status:\s(\w*)~', $text, $matches);
修复当前方法的另一种方法是使(.*)
中的点变得懒惰,然后对当前的前瞻稍作修改:
preg_match('~status:\s(.*?)(?=\s|$)~', $text, $matches);
答案 2 :(得分:2)
你可能会问为什么你当前的解决方案不起作用?
如果在匹配status:
后看到它与空格字符匹配,则匹配到.*
的行尾,然后回溯以查找存在空格的匹配项。如果ok
之后的空格不存在,或者稍后在字符串中的某处,则找不到匹配项。解决方案:
status:\s+\K\w+
您不需要捕获组,也不应该量化前瞻。
查看实时demo here
PHP代码:
preg_match('~status:\s+\K\w+~', $text, $matches);