繁体   English   中英

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

[英]How do you limit what text is used to match a regular expression

我写了以下正则快递:

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

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

目标字符串:

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

这是regex101工作示例

我正在使用pcre(php)

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

您只需要更换. 带有[^,]实例[^,]因为.*? 将包括逗号,因此匹配逗号之后不能有任何“跑”或“快”。 这里:

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

Regex101演示

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

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

暂无
暂无

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

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