如何限制用于匹配正则表达式的文本

时间:2018-09-09 17:34:03

标签: php regex

我写了以下正则表达式:

(^(?=.*?\bran\b)(?=.*?\bfast\b)[^,]*)

我的目标是,当直到第一个逗号的文本同时包含ran和fast时,它是否与目标字符串匹配。

目标字符串:

  1. Jim跑得快,但赢得了比赛=>应该比赛
  2. 吉姆跑得很好,但约翰跑得快 太。 =>不匹配
  3. 吉姆跑得好,约翰跑得快,而简跑得快。 =>不匹配

这里是working sample at regex101

我正在使用pcre(php)

我遇到的问题是当前编写的正则表达式正在查看整个文本字符串,以查看是否存在两个单词(运行和快速)。我想将文本限制为第一个逗号之前的文本,但不知道如何实现。

1 个答案:

答案 0 :(得分:2)

您只需要用.替换[^,]实例,因为.*?将包含逗号,因此匹配之后出现的所有“随机”或“快速” 逗号。在这里:

(^(?=[^,]*?\bran\b)(?=[^,]*?\bfast\b)[^,]*)

Regex101 demo

请注意,[^,]也将与换行符匹配,因此,如果这不是您想要的,则可以考虑使用类似[^,\n][^,\r\n]的东西。

此外,请注意,即使没有逗号,您的正则表达式也将匹配。如果您想确保匹配后跟一个逗号,则可能需要在末尾添加另一个肯定的Lookahead(即(?=,))。