我正在尝试匹配可出现在字符串中任何位置的3个单词:
Win
Enter
Now
字符串中必须存在所有3个单词才能返回匹配项。但是当我确实存在所有3个单词时,我遇到了匹配问题。
以下是我正在使用的正则表达式:http://regexr.com/39b83
^(?=.*?win)(?=.*?(enter))(?=.*?(now)).*
当所有三个单词都在同一行内时,正则表达式正在工作 ...当它在不同行上的整个字符串中展开时,它无法匹配。
感谢任何方向或帮助。
答案 0 :(得分:2)
答案 1 :(得分:1)
怎么样......
/(win|enter|now)/gi
答案 2 :(得分:1)
我认为C#
会支持(?s)
DOTALL修饰符。如果是,那么你可以试试下面的正则表达式,
(?i)(?s)win.*?enter.*?now
答案 3 :(得分:0)
听起来你想要匹配这些单词出现的行,最多三行。这并不容易,但是:
/^.*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
答案 4 :(得分:0)
这是因为点与换行符没有匹配。要改变这一点,你必须采取各种方式。第一个,使用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]+