2011-11-10 16 views

cevap

6

bir değişiklik ile ?-xism: yılında Zaten sahip olduğunuz qr, çünkü korunuyor. Bunun yerine, bu kullanın: o sürece sonradan yeniden derlemek olarak bir dize sanki

$pat = qr/F(o+)B(a+)r/i; 
2

Varolan regex değiştirebilir

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 
+1

+ 1. '(? ...)' parçası regex stringification değişti çünkü bu Perl 5.12 sonra çalışmıyor http://perldoc.perl.org/perlre.html#Extended-Patterns – daxim

+2

belgelenmiştir. –

1

benziyor ÇIKIŞ tek yol yerine, RE stringify etmektir (-i) ile (i-) ve yeniden alıntı geri:

my $pat = qr/F(o+)B(a+)r/; 
my $str = "$pat"; 
$str =~ s/(?<!\\)(\(\?\w*)-([^i:]*)i([^i:]*):/$1i-$2$3:/g; 
$pati = qr/$str/; 

GÜNCELLEME: Örneğim muhtemelen

my $pat = qr/F(o+)B(a+)r/; 
my $str = "$pat"; 
$str =~ s/(?<!\\)\(\?\^/(?^i/g; 
$pati = qr/$str/; 

gibi görünmelidir Ama perl 5.14 elden yoktur ve bunu test edemez, böylece bir different way içinde 5.14 tırnak İfadelerinin perl.

UPD2: Ben de kaçtı açılış parantez kontrol etmek için başarısız oldu. Mevcut bir regex bir değiştirici bitki, uygun bir şekilde göstermek için

+0

Bu artık çalışmayacak çünkü normal ifadeler Perl 5.14'te -options yapmıyor. –

+0

@briandfoy: Dışarı çıktığınız için teşekkürler. Cevabımı güncelledim, ancak 5.14 parçasının çalıştığından emin değilim. – Dallaylaen

İlgili konular