1

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

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

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

我查看了这个perl 正则表达式来匹配字符后面的所有单词,但我似乎无法从中解决。

任何帮助都会很棒。

4

2 回答 2

4

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

#!/usr/bin/perl

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

如果您确实想完全匹配标签,则可以尝试(?<=@)\w+。它匹配 之后的每个字符@,但被@排除在外。

#!/usr/bin/perl

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

参考:使用 Look-ahead 和 Look-behind

于 2012-09-29T06:42:28.853 回答
2

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

@(\w+) 
于 2012-09-29T06:27:38.047 回答