【问题标题】:emacs regex not matching as expectedemacs 正则表达式与预期不匹配
【发布时间】:2013-05-08 02:56:40
【问题描述】:

我正在尝试匹配以下文本:

void foo( int xxx,
int const & xxx,

使用正则表达式:

\(\s-+\)[^\s-]+,$

IE:匹配空白,后跟非空白,在行尾跟一个逗号

预期匹配:

[space]xxx, (line 1)
[space]xxx, (line 2)

实际匹配:

[space]foo( int xxx, (line 1)
[space]& xxx, (line 2)

为什么即使我指定了“无空格”,emacs 仍会匹配中间字符串的空格?

【问题讨论】:

    标签: regex emacs


    【解决方案1】:

    替代字符[^\s-] 匹配除\s- 之外的任何字符。

    请参阅C-h i g (elisp) Regexp Special RET 中的“[ ... ]”。

    您想使用 \S-(大写)作为 \s- 的倒数,而不是这样
    (C-h i g (elisp) Regexp Backslash RET)。

    或者,如果您仍然想要/需要替代字符,请使用字符类
    (C-h i g (elisp) Char Classes RET)。

    【讨论】:

      【解决方案2】:

      这是因为您没有将正则表达式锚定到行首。所以在你后来的两个案例中:

      [space]foo([space]int[space]xxx, (line 1)
      [space]&[space]xxx, (line 2)
      

      它只是匹配[space]xxx,

      试试^\(\s-+\)[^\s-]+,$(或者,当写成 Emacs Lisp 字符串时:"^\\(\\s-+\\)[^\\s-]+,$"

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-10-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-07-18
        • 2016-03-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多