引用符付き正規表現に 'i'などの正規表現修飾子を追加する簡単な方法はありますか?たとえば:引用符付きの正規表現(qr)に修飾子を追加する方法
$pat = qr/F(o+)B(a+)r/;
$newpat = $pat . 'i'; # This doesn't work
私は考えることができる唯一の方法は、print "$pat\n"
にあり、バック(?-xism:F(o+)B(a+)r)
を取得し、「私は」あなたは結果内の旗を置くことができない置換
引用符付き正規表現に 'i'などの正規表現修飾子を追加する簡単な方法はありますか?たとえば:引用符付きの正規表現(qr)に修飾子を追加する方法
$pat = qr/F(o+)B(a+)r/;
$newpat = $pat . 'i'; # This doesn't work
私は考えることができる唯一の方法は、print "$pat\n"
にあり、バック(?-xism:F(o+)B(a+)r)
を取得し、「私は」あなたは結果内の旗を置くことができない置換
と?-xism:
でを削除しよう既に保護されているので、あなたが既に持っているqr
です。代わりに、これを使用する:それは限り、あなたは後でそれを再コンパイルなどの文字列であるかのよう
$pat = qr/F(o+)B(a+)r/i;
は、既存の正規表現を変更することができ
my $pat = qr/F(o+)B(a+)r/;
print $pat, "\n";
print 'FOOBAR' =~ $pat ? "match\n" : "mismatch\n";
$pat =~ s/i//;
$pat = qr/(?i)$pat/;
print $pat, "\n";
print 'FOOBAR' =~ $pat ? "match\n" : "mismatch\n";
(?-xism:F(o+)B(a+)r)
mismatch
(?-xism:(?i)(?-xsm:F(o+)B(a+)r))
match
がどのように見えるOUTPUT唯一の方法は、REを文字列化し、(-i)を(i-)に置き換えて、それを再度引用することです:
my $pat = qr/F(o+)B(a+)r/;
my $str = "$pat";
$str =~ s/(?<!\\)(\(\?\w*)-([^i:]*)i([^i:]*):/$1i-$2$3:/g;
$pati = qr/$str/;
UPDATE:perlのdifferent wayで5.14引用符正規表現を、ので、私のサンプルは、おそらく
my $pat = qr/F(o+)B(a+)r/;
my $str = "$pat";
$str =~ s/(?<!\\)\(\?\^/(?^i/g;
$pati = qr/$str/;
のようになります。しかし、私は手元にperlの5.14を持っていないし、それをテストすることはできません。
UPD2:エスケープされた開始括弧も確認できませんでした。
正規表現の文字列化でPerl 5.14で-optionsが行われないため、これはもう動作しません。 –
@briandfoy:ありがとうございます。私は自分の答えを更新しましたが、5.14の部分が動作するかどうかは分かりません。 – Dallaylaen
+1既存の正規表現に修飾語を植えるための適切な方法を示します。 '(?...)'部分はhttp://perldoc.perl.org/perlre.html#Extended-Patterns – daxim
で文書化されています。正規表現の文字列が変更されたため、これはPerl 5.12以降では機能しません。 –