[英]how to match multiple words in string using regex?
我正在尝试匹配可以出现在字符串中任何位置的3个单词:
Win
Enter
Now
字符串中必须存在所有3个单词,以使其匹配返回。 但是当所有3个单词都存在时,我遇到了匹配问题。
下面是我正在使用的正则表达式: http : //regexr.com/39b83
^(?=.*?win)(?=.*?(enter))(?=.*?(now)).*
当所有三个单词都在同一行中时, 正则表达式正在工作。当正则表达式分布在整个字符串的不同行中时,它无法匹配。
任何方向或帮助表示赞赏。
怎么样...
/(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.