繁体   English   中英

如何使用正则表达式匹配字符串中的多个单词?

[英]how to match multiple words in string using regex?

我正在尝试匹配可以出现在字符串中任何位置的3个单词:

Win
Enter
Now

字符串中必须存在所有3个单词,以使其匹配返回。 但是当所有3个单词都存在时,我遇到了匹配问题。

下面是我正在使用的正则表达式: http : //regexr.com/39b83

^(?=.*?win)(?=.*?(enter))(?=.*?(now)).*

当所有三个单词都在同一行中时, 正则表达式正在工作。当正则表达式分布在整个字符串的不同行中时,它无法匹配。

任何方向或帮助表示赞赏。

由于您不想匹配中心(如单词“ enter”)之类的单词,因此我将使用:

/(\benter\b)|(\bwin\b)|(\bnow\b)/

链接到提琴手

怎么样...

/(win|enter|now)/gi

正则表达式图

我认为C#将支持(?s) DOTALL修饰符。 如果是,那么您可以尝试以下正则表达式,

(?i)(?s)win.*?enter.*?now

听起来您想匹配显示这些单词的行,最多三行。 这并不是很容易,但是:

/^.*win.*(?:\s+.*)?enter.*(?:\s+.*)?now.*|^.*win.*(?:\s+.*)?now.*(?:\s+.*)?enter.*|^.*enter.*(?:\s+.*)?win.*(?:\s+.*)?now.*|^.*enter.*(?:\s+.*)?now.*(?:\s+.*)?win.*|^.*now.*(?:\s+.*)?win.*(?:\s+.*)?enter.*|^.*now.*(?:\s+.*)?enter.*(?:\s+.*)?win.*/igm

应该这样做。

这是因为点与换行符不匹配。 要更改此设置,您必须采取一些方法。 首先,使用s修饰符(允许点匹配换行符):

(?s)^(?=.*\bwin\b)(?=.*\benter\b)(?=.*\bnow\b).*

但是此功能并非始终可用(例如,在Javascript中)。 第二种方法是用[\\s\\S] (与所有字符匹配的字符类)替换点:

^(?=[\s\S]*\bwin\b)(?=[\s\S]*\benter\b)(?=[\s\S]*\bnow\b)[\s\S]+

暂无
暂无

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

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