正则表达式 - 单词后跟另一个单词

时间:2018-05-24 11:11:33

标签: php regex string between

我有PHP应用程序,我想得到字符串" word"接下来是另一个字。它后面可以跟另一个字符串。

  1. 你好,这是状态:ok
  2. 您好,这是状态:ok。
  3. 你好,这是状态:好的,我喜欢它。
  4. 我希望始终获得" ok" 状态。该怎么做?

    我有:

    preg_match('~status:\s(.*)(?=\s.*)?~', $text, $matches);
    

    但是会在状态后返回所有内容:

3 个答案:

答案 0 :(得分:2)

你可以使用正面观察,并在其后面加上每个单词字符。

(?<=status:\s)(\\w+)

<强> Demo

答案 1 :(得分:2)

您可以将(.*)替换为(\w*)

preg_match('~status:\s(\w*)~', $text, $matches);

Demo

修复当前方法的另一种方法是使(.*)中的点变得懒惰,然后对当前的前瞻稍作修改:

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);