繁体   English   中英

正则表达式-单词后接一个单词

[英]Regex - word followed after another word

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

  1. 您好,状态为:确定
  2. 您好,状态为:确定。
  3. 您好,状态为:好,我喜欢。

我希望始终保持“正常”状态。 请怎么做?

我有:

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

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

您可以使用正向后眼来做到这一点,并在其后加上每个单词字符。

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

演示版

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

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

演示版

解决当前方法的另一种方法是使(.*)的点变得懒惰,然后对当前的前瞻做些微更改:

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

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

如果在匹配status:后看到它与空格字符匹配status:然后按.*直到行尾匹配,然后回溯以找到存在空格的匹配项。 如果ok之后的空格不立即存在,或者在字符串的后面不存在,则找不到匹配项。 解:

status:\s+\K\w+

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

在这里观看现场演示

PHP代码:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM