【问题标题】:Regex - word followed after another word正则表达式 - 一个词后跟一个词
【发布时间】:2018-05-24 11:11:33
【问题描述】:

我有 PHP 应用程序,我想在另一个单词之后得到字符串“word”。后面可以跟其他字符串。

  1. 你好,这是状态:ok
  2. 您好,这是状态:好的。
  3. 您好,这是状态:好的,我喜欢。

我希望始终保持 “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

    【讨论】:

      猜你喜欢
      • 2014-05-18
      • 2017-11-30
      • 2011-09-02
      • 1970-01-01
      • 2021-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多