我需要在引号字符("
)之间捕获字符串以更改引用字符的引号,因此我创建了替换,我的代码:
my $pk = qq|IV Baltic Sea NGO Forum "Challenges for Baltic Sea civil society"|;
$pk =~ s/"(\p{Word}+.?+)"/«$1»/g;
say $pk;
我的意思是正则表达式:
当引号之间有任何非单词字符时,我不会被捕获。为什么呢?
我也发现了another solution,但我想明白,为什么我的正则表达式不起作用?
答案 0 :(得分:4)
.?+
不是不情愿的量词。它实际上是占有 ? quantifier
。
您需要改为使用.+?
。
所以,试试这个:
$pk =~ s/"(\p{Word}+.+?)"/«$1»/g;
或者,您甚至可以使用[^"]+
代替reluctant quantifier
。它将自动停在第一个"
字符处:
$pk =~ s/"(\p{Word}+[^"]+)"/«$1»/g;