【问题标题】:search pattern in Notepad++Notepad++ 中的搜索模式
【发布时间】:2016-09-20 10:44:48
【问题描述】:

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


    【解决方案1】:

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

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

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

    【讨论】:

    • 其实是*我想说任意长度任意字符,怎么表达?
    • 星号表示前面的元素出现零次或多次。见量化部分here
    • 我正在寻找一个模式“ app(abs(.........),abs(.................)) ”,当我使用“ app(abs(.*),abs(.*)) ”时,它还会找到一些字符串,例如“app(abs(.......), app( . .............))”这是错误的。它应该只找到“app(abs(............),abs(............))”。为什么它与第二个“abs”不匹配?我的表达有什么问题?请帮忙
    • 您应该提供您正在使用的确切模式和文本
    • 更新了帖子,请看。
    【解决方案2】:

    这在 Notepad++ 中可行吗?

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

    怎么做?

    看看那个链接:Regular Expressions Notepad

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

    RegExr

    【讨论】:

      【解决方案3】:

      类似这样的:

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

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

      【讨论】:

      • 括号与使用此表达式“app(abs((.*?)),abs((.*?)))”的结果不匹配。 "^app(abs((.*?)),abs((.*?)))" 不工作,不知道为什么。
      猜你喜欢
      • 2012-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-12
      • 2017-08-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多