2011-11-10 24 views
6

में एक संशोधक कैसे जोड़ें, क्या रेजीक्स संशोधक को 'i' जैसे उद्धृत नियमित अभिव्यक्ति में जोड़ने का कोई आसान तरीका है? उदाहरण के लिए:उद्धृत नियमित (क्यूआर) अभिव्यक्ति

$pat = qr/F(o+)B(a+)r/; 
$newpat = $pat . 'i'; # This doesn't work 

एक ही रास्ता मैं print "$pat\n" करने के लिए है के बारे में सोच और वापस (?-xism:F(o+)B(a+)r) हो और दूर करने की कोशिश कर सकते हैं 'i' एक प्रतिस्थापन

उत्तर

6

आप का परिणाम अंदर झंडा नहीं डाल सकते साथ ?-xism: में qr जो आपके पास पहले से है, क्योंकि यह संरक्षित है। इसके बजाय, इस का उपयोग करें:

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

जैसे कि यह एक स्ट्रिंग के रूप में लंबे समय तक आप इसे बाद में पुन: संयोजित रूप में था आप एक मौजूदा regex संशोधित कर सकते हैं

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 मौजूदा रेगेक्स में एक संशोधक लगाने के लिए उचित तरीका दिखाने के लिए +1। '(? ...)' भाग http://perldoc.perl.org/perlre.html#Extended-Pternterns – daxim

+2

में प्रलेखित है यह पर्ल 5.12 के बाद काम नहीं करता है क्योंकि रेगेक्स स्ट्रिंगिफिकेशन बदल गया है। –

1

तरह लग रहा है आरई को स्ट्रिंग करने का एकमात्र तरीका है (ii) (ii) के साथ (ii) को प्रतिस्थापित करें और इसे फिर से उद्धृत करें:

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

अद्यतन: पर्ल एक different way में 5.14 उद्धरण regexps, इसलिए मेरे नमूना शायद

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

की तरह दिखना चाहिए लेकिन मैं पर्ल 5.14 हाथ में नहीं है और यह परीक्षण नहीं कर सकते।

यूपीडी 2: मैं बचने वाले भागने के लिए भी जांचने में विफल रहा।

+0

यह अब और काम नहीं करेगा क्योंकि रेगेक्स स्ट्रिंगिफिकेशन नहीं करता है - पर्ल 5.14 में विकल्प। –

+0

@briandfoy: बाहर निकलने के लिए धन्यवाद। मैंने अपना जवाब अपडेट कर लिया है, लेकिन मुझे यकीन नहीं है कि 5.14 भाग काम करता है। – Dallaylaen

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^