【问题标题】:Regex - word followed after another word正则表达式 - 一个词后跟一个词
【发布时间】:2018-05-24 11:11:33
【问题描述】:
我有 PHP 应用程序,我想在另一个单词之后得到字符串“word”。后面可以跟其他字符串。
- 你好,这是状态:ok
- 您好,这是状态:好的。
- 您好,这是状态:好的,我喜欢。
我希望始终保持 “ok” 状态。请问该怎么做?
我有:
preg_match('~status:\s(.*)(?=\s.*)?~', $text, $matches);
但是在 status: 之后返回所有内容。
【问题讨论】:
标签:
php
regex
string
between
【解决方案1】:
您可能会问为什么您当前的解决方案不起作用?
如果您在匹配status: 之后看到它匹配空白字符,则匹配.* 直到行尾,然后回溯以查找存在空格的匹配项。如果ok 之后的空格不立即存在或在字符串后面的某个位置不存在,则找不到匹配项。解决方案:
status:\s+\K\w+
您不需要捕获组,也不应该量化前瞻。
观看直播demo here
PHP 代码:
preg_match('~status:\s+\K\w+~', $text, $matches);
【解决方案2】:
您可以将(.*) 替换为(\w*):
preg_match('~status:\s(\w*)~', $text, $matches);
Demo
解决当前方法的另一种方法是将(.*) 中的点设为惰性,然后对当前的前瞻进行轻微更改:
preg_match('~status:\s(.*?)(?=\s|$)~', $text, $matches);
【解决方案3】:
您可以使用积极的后视来做到这一点,然后将每个单词字符放在后面。
(?<=status:\s)(\\w+)
Demo