【发布时间】:2016-11-30 05:21:58
【问题描述】:
我了解 /g 标志,并且可以多次匹配一个模式,但我很难研究这个特定问题。
假设我的字符串有多行,我想匹配包含特定单词的行上的分组模式,但不匹配不包含特定单词的不同行。
以多行字符串$test为例
Unimportant line.
Important line with !special1! word and !special2! word.
Extra line with !special3! word and !special4! word.
我想在重要行而不是额外行上打印两个特价,所以结果是:
special1, special2
我可以使用 /g 匹配 每个 特殊的
my @both = $test =~ /!(.+?)!/g;
print join(', ', @both);
但是输出是:
special1, special2, special3, special4
如果我尝试包含“重要”这个词
my @both = $test =~ /Important.+?!(.+?)!/g;
print join(', ', @both);
我刚刚得到
special1
我知道它只匹配一次,因为“重要”只出现一次,但我不知道如何获得输出
special1, special2
【问题讨论】:
-
如果有多行包含
Important会怎样? -
@Borodin 嗯,我想在我的用例中只会有一行
-
@Borodin 其实我现在很好奇,你怎么会只得到包含重要的第一行
-
@KVon 你在我的回答中有这个。获得匹配后退出循环,这将是第一个。所以在打印后添加
last;。 (这假设带有^Important确实 的行具有模式。否则,添加检查。)