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具有不匹配的括号。
请给点建议!
提前致谢
最佳答案
是的,您应该将Search Mode
切换为Regular expression
(在Find
对话框的底部),并使用正则表达式作为模式。
假设模式中的星号表示任何单个字符,则应将*
替换为.
(匹配正则表达式语法中的任何单个字符),并将\
放在每个括号之前((
和)
是特殊字符,必须使用\
进行转义)。因此,您将获得:
str1\(str2\(.....\),str2\(........\)\)
为了使其不那么丑陋,您可以将5个点替换为
.{5}
str1\(str2\(.{5}\),str2\(.{8}\)\)
回答第一部分更新的问题
实际上,上面的模式并没有给出您描述的结果。
.?
与任何字符匹配零或一,并且括号被解释为特殊符号。因此,您的模式与appabsX,abs
之类的字符串匹配。应该这样修改:
app\(abs\((.*)\),abs\((.*)\)\)
实际上,它找到了
t
和,
之间第二行的一部分,这是正确的行为。如果要忽略这种情况,则应以某种方式指定要搜索的字符串的开头。一些例子:^
与行的乞求相匹配:^app\(abs\((.*)\),abs\((.*)\)\)
(\s +)至少匹配一个空格字符
(\s+)app\(abs\((.*)\),abs\((.*)\)\)
另外,最好通过将
?
放在*
之后来启用lazy matching,如下所示:^app\(abs\((.*?)\),abs\((.*?)\)\)
关于regex - Notepad++中的搜索模式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39592058/