【问题标题】:Perl Regex to match everything after @ characterPerl 正则表达式匹配 @ 字符之后的所有内容
【发布时间】:2012-09-20 22:58:12
【问题描述】:

我有一堆包含@ 符号引用的标签的文本文件。例如如果笔记包含@home,则该笔记被标记为“家”。

我正在尝试找到一个 Perl 正则表达式,它将匹配 @ 字符之后的所有内容,但不包括 @character。

到目前为止,我有这个(@\w+),它成功匹配了整个标签(例如,它匹配@home@work 等)但我找不到修改它的方法,所以只有@字符后面的字符得到已接。

我看过这个perl regex to match all words following a character,但我似乎无法从中解决。

任何帮助都会很棒。

【问题讨论】:

  • 看看“捕获”子模式:/@(\w+)/

标签: regex perl


【解决方案1】:

正如@Quentin 所说,@(\w+) 是最好的解决方案。

#!/usr/bin/perl

while (<>) {
    while (/@(\w+)/g) {
        print $1, "\n";
    }
}

如果你确实想完全匹配标签,你可以试试(?&lt;=@)\w+。它匹配@ 之后的所有字符,但不包括@

#!/usr/bin/perl

while (<>) {
    while (/(?<=@)\w+/g) {
        print $&, "\n";
    }
}

参考:Using Look-ahead and Look-behind

【讨论】:

    【解决方案2】:

    只需移动@,使其位于捕获组之外:

    @(\w+) 
    

    【讨论】:

    • 我猜他的() 可能是他的分隔符。在这种情况下,他需要在里面添加一个额外的组。
    • 谢谢大家。我正在使用一个名为 Patterns 的应用程序来测试我的 reg exp 并且我已经尝试了该解决方案,但 @was 仍然在匹配的结果中突出显示。当我看到解决方案时,我决定在代码中尝试一下,它就奏效了。无论如何,感谢所有的帮助。我现在必须弄清楚为什么 Patterns 仍然显示整个单词被突出显示。
    • 很可能是因为高亮显示了匹配的文本,而不是每个捕获组。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    • 2015-01-22
    • 2020-03-16
    • 1970-01-01
    • 2018-12-21
    相关资源
    最近更新 更多