Notepad++ 中的搜索模式

search pattern in Notepad++

1) 首先我想搜索带有

等模式的文本
   app(abs(something),abs(something))

在使用 Notepad++ 的大文本中,文本示例如下所示:

app(abs(any length of characters here),abs(any length of characters here)),
tapp(abs(any length of characters here),abs(any length of characters here)),
app(abs(any length of characters here),app(any length of characters here)),
app(abs(any length of characters here),some(any length of characters here)),
app(abs(any length of characters here)) ,abs(any length of characters here))

当我使用 "app(abs((.?)),abs((.?)))" 进行搜索时,它会在上面的示例中找到第一行和第二行。 第二行不是我要搜索的内容。 我的表情有什么问题?

2) 如果可以的话,我希望每个"abs"后面的左括号和右括号()应该匹配,例如

   "app(     abs(..(..)..),abs(..(..(...)..)..)   )"

但不像

   "app(abs((), abs())"

第一个 abs 有不匹配的括号。

请多指教!

提前致谢

Is that possible in Notepad++?

是的,可以使用正则表达式。

How to do it?

看看那个link:Regular Expressions Notepad

如果您想了解有关学习、构建和测试正则表达式的更多信息,请查看 link:

RegExr

是的,您应该将 Search Mode 切换为 Regular expression(在 Find 对话框的底部)并使用正则表达式作为模式。

假设您模式中的星号表示任何单个字符,您应该将 * 替换为 .(匹配正则表达式语法中的任何单个字符)并在每个字符之前放置 \括号(() 是特殊字符,必须使用 \ 进行转义)。因此,您将获得:

str1\(str2\(.....\),str2\(........\)\)

为了不那么难看,可以用.{5}

代替5个点
str1\(str2\(.{5}\),str2\(.{8}\)\)


第一部分更新问题的答案

实际上,上面的模式并没有给出您描述的结果。 .? 匹配零个或一个任何字符,括号被解释为特殊符号。因此,您的模式匹配 appabsX,abs 这样的字符串。

应该这样修改:

app\(abs\((.*)\),abs\((.*)\)\)

it finds first and second line in above sample

实际上,它找到了 t, 之间的第二行的一部分,这是正确的行为。如果你想忽略这种情况,你应该以某种方式指定你正在搜索的字符串的开头。一些例子:

^ 匹配行首:

^app\(abs\((.*)\),abs\((.*)\)\)

(\s+) 匹配至少一个白色 space 字符

(\s+)app\(abs\((.*)\),abs\((.*)\)\)

此外,最好在*之后加上?来启用lazy matching,像这样:

^app\(abs\((.*?)\),abs\((.*?)\)\)

像这样:

^app\(abs\((.*?)\),abs\((.*?)\)\)

搜索中的复选框window“。匹配新行”需要取消选中。