正则表达式在页面上找到两个单词

时间:2014-11-12 15:47:49

标签: regex intellij-idea

我试图找到包含单词的所有页面" text1"和" text2"。 我的正则表达式:

text1(.|\n)*text2 

它不起作用.. enter image description here

5 个答案:

答案 0 :(得分:27)

如果您的IDE支持s单行)标记(因此.字符可以匹配换行符),您可以搜索以下项目:

(text1).*(text2)|\2.*\1

Example with s flag

如果IDE不支持s标记,则需要使用[\s\S]代替.

(text1)[\s\S]*(text2)|\2[\s\S]*\1

Example with [\s\S]

有些语言使用$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)

为IntelliJ

添加响应

在@ OnlineCop的答案的基础上,要在IntelliJ中交换两个表达式的顺序,你可以在接受的响应中设置搜索样式,但由于IntelliJ不允许单行版本,你必须放置替换语句在一个单独的领域。此外,IntelliJ使用$来识别表达式而不是\

例如,我倾向于将null放在比较结束时,some people prefer it otherwise。因此,为了保持工作的一致性,我使用这个正则表达式模式来交换我的比较顺序:

enter image description here

请注意,IntelliJ在工具提示中显示替换的结果。

答案 4 :(得分:0)

对我来说,text1*{0,}(text2){0,}

使用{0,},您可以决定使关键字获得零次或多次,或者设置{1,x}以使关键字获得1倍或x倍(您想要的频率)。