为什么非单词字符在我的正则表达式中不匹配?

时间:2013-02-14 08:14:25

标签: regex perl

我需要在引号字符(")之间捕获字符串以更改引用字符的引号,因此我创建了替换,我的代码:

my $pk = qq|IV Baltic Sea NGO Forum "Challenges for Baltic Sea civil society"|;
$pk =~ s/"(\p{Word}+.?+)"/«$1»/g;
say $pk;

我的意思是正则表达式:

  1. 引用char
  2. 后跟至少一个字char
  3. 后跟任何字符
  4. 直到下一次引用char(非贪婪捕获)
  5. 当引号之间有任何非单词字符时,我不会被捕获。为什么呢?

    我也发现了another solution,但我想明白,为什么我的正则表达式不起作用?

1 个答案:

答案 0 :(得分:4)

.?+不是不情愿的量词。它实际上是占有 ? quantifier

您需要改为使用.+?

所以,试试这个:

$pk =~ s/"(\p{Word}+.+?)"/«$1»/g;

或者,您甚至可以使用[^"]+代替reluctant quantifier。它将自动停在第一个"字符处:

$pk =~ s/"(\p{Word}+[^"]+)"/«$1»/g;
相关问题