代码之家  ›  专栏  ›  技术社区  ›  MakoBuk

regex-单词后接另一个单词

  •  0
  • MakoBuk  · 技术社区  · 7 年前

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

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

    我想总是得到 “好” 状态。请问怎么做?

    我有:

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

    但是之后一切都会回来 状态: .

    3 回复  |  直到 7 年前
        1
  •  2
  •   revo shanwije    7 年前

    您可能会问为什么您当前的解决方案不起作用?

    如果您看到匹配后它与空白字符匹配 status: 然后匹配到行尾 .* 然后回溯找到一个存在空间的匹配。如果后面有空格 ok 不立即存在或不在字符串中的某个位置找不到匹配项。解决方案:

    status:\s+\K\w+
    

    您不需要捕获组,也不应该量化前瞻性。

    现场观看 demo here

    PHP代码:

    preg_match('~status:\s+\K\w+~', $text, $matches);
    
        2
  •  2
  •   Tim Biegeleisen    7 年前

    你可以换一个 (.*) 具有 (\w*) :

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

    Demo

    另一种解决当前方法的方法是在 (*) 懒惰,然后对当前的展望做一个微小的改变:

    preg_match('~status:\s(.*?)(?=\s|$)~', $text, $matches);
    
        3
  •  2
  •   Yassin Hajaj    7 年前

    你可以用一个积极的向后看,然后把每个单词字符都放在后面。

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

    Demo