Notepad++ 中的搜索模式

问题描述 投票:0回答:3

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有不匹配的括号。

请大家给点建议!

提前致谢

regex notepad++ text-editor
3个回答
5
投票

是的,您应该将

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\((.*)\)\)

此外,最好通过在 ? 之后放置

*
来启用
惰性匹配
,如下所示:

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

3
投票

在Notepad++中可以吗?

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

如何做?

看一下该链接:正则表达式记事本

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

RegExr


0
投票

类似这样的:

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

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

Screenshot

© www.soinside.com 2019 - 2024. All rights reserved.