我试图找到包含单词的所有页面" text1"和" text2"。 我的正则表达式:
text1(.|\n)*text2
它不起作用..
答案 0 :(得分:27)
如果您的IDE支持s
(单行)标记(因此.
字符可以匹配换行符),您可以搜索以下项目:
(text1).*(text2)|\2.*\1
如果IDE不支持s
标记,则需要使用[\s\S]
代替.
:
(text1)[\s\S]*(text2)|\2[\s\S]*\1
有些语言使用$1
和$2
代替\1
和\2
,因此您可能需要更改。
修改
或者,如果您想简单匹配一个文件包含两个字符串(但实际上没有选择任何内容),您可以使用预见:
(?s)^(?=.*?text1)(?=.*?text2)
这并不关心参数的顺序(或数字),对于您要搜索的每个其他文本,您只需附加另一个(?=.*?text_here)
。这种方法很好,因为你甚至可以包含正则表达式而不仅仅是普通的字符串。
答案 1 :(得分:9)
text0[\s\S]*text1
试试这个。这应该为你做。
这样做会匹配包括多行的所有内容。与.*?
带s
标记相似。
\s
负责spaces,newlines,tabs
\S
注意任何非空格角色。
答案 2 :(得分:2)
如果您希望正则表达式匹配多行,我会尝试:
text1[\w\W]*text2
使用.
不是一个好选择,因为它通常不会在多行上匹配。另外,对于匹配单个字符,我认为使用方括号比使用( ... | ... )
如果您希望匹配与订单无关,请使用此:
(?:text1[\w\W]*text2)|(?:text2[\w\W]*text1)
答案 3 :(得分:1)
在@ OnlineCop的答案的基础上,要在IntelliJ中交换两个表达式的顺序,你可以在接受的响应中设置搜索样式,但由于IntelliJ不允许单行版本,你必须放置替换语句在一个单独的领域。此外,IntelliJ使用$
来识别表达式而不是\
。
例如,我倾向于将null
放在比较结束时,some people prefer it otherwise。因此,为了保持工作的一致性,我使用这个正则表达式模式来交换我的比较顺序:
请注意,IntelliJ在工具提示中显示替换的结果。
答案 4 :(得分:0)
对我来说,text1*{0,}(text2){0,}
。
使用{0,}
,您可以决定使关键字获得零次或多次,或者设置{1,x}
以使关键字获得1倍或x倍(您想要的频率)。