2

派手なものの引用符を変更するには、引用符文字 ( ) の間の文字列をキャプチャする必要があるため"、置換を作成しました。私のコード:

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

私は正規表現を次のように意味しました:

  1. 引用文字
  2. 少なくとも 1 つの単語 char が続く
  3. 任意の文字が続く
  4. 次の引用文字まで (貪欲でないキャプチャ)

引用符の間に単語以外の文字がある場合、キャプチャされません。なんで?

別の解決策も見つけましたが、正規表現が機能しない理由を理解したいのですが?

4

1 に答える 1

4

.?+気が進まない量指定子ではありません。実際には所有格 ? quantifierです。

.+?代わりに使用する必要があります。

だから、これを試してください:

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

または、[^"]+の代わりに使用することもできますreluctant quantifier"最初の文字で自動的に停止します。

$pk =~ s/"(\p{Word}+[^"]+)"/«$1»/g;
于 2013-02-14T08:17:37.570 に答える