正则表达式 - 单词接踵而至



我有PHP应用程序,我想在另一个单词后面加上字符串"单词"。它可以跟着另一个字符串。

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

我想始终获得"正常">状态。请问该怎么做?

我有:

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

但是 is 返回状态后的所有内容:。

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

如果您看到它在匹配后匹配空格字符status:则匹配到行尾.*然后回溯以查找存在空格的匹配项。如果ok后面的空格不立即存在或在字符串后面的某个地方不存在,则找不到匹配项。溶液:

status:s+Kw+

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

在此处观看现场演示

PHP代码:

preg_match('~status:s+Kw+~', $text, $matches);

你可以用(w*)替换(.*)

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

演示

修复当前方法的另一种方法是使(.*)中的点变得懒惰,然后对当前展望进行轻微更改:

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

你可以使用积极的回头看来做到这一点,并在它后面取下每个单词字符。

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

演示

最新更新