我有 PHP 应用程序,我想在另一个词之后得到字符串“word”。它后面可以跟另一个字符串。
- 您好,这是状态:好的
- 您好,这是状态:好的。
- 您好,这是状态:好的,我喜欢它。
我想始终获得“好的”状态。请问该怎么做?
我有:
preg_match('~status:\s(.*)(?=\s.*)?~', $text, $matches);
但是在status:之后返回所有内容。
您可以替换(.*)为(\w*):
preg_match('~status:\s(\w*)~', $text, $matches);
修复当前方法的另一种方法是使点变得(.*)惰性,然后对当前的前瞻进行轻微更改:
preg_match('~status:\s(.*?)(?=\s|$)~', $text, $matches);
您可能会问为什么您当前的解决方案不起作用?
如果您在匹配后看到它与空白字符匹配status:,则匹配到行尾,.*然后回溯以查找存在空格的匹配项。如果后面的空格ok不立即存在或字符串后面的某处不存在,则找不到匹配项。解决方案:
status:\s+\K\w+
您不需要捕获组,也不应该量化前瞻。
在此处查看现场演示
PHP代码:
preg_match('~status:\s+\K\w+~', $text, $matches);