2010-09-02 61 views
2

我有一個字符串,我想在正則表達式中使用它,就像m/$mystring_03/一樣,但是$mystring包含導致問題的+ s和斜槓。在Perl中有沒有一種簡單的方法來修改$mystring以確保所有正則表達式通配符或其他特殊字符能夠正確轉義? (像所有+變成\+使字符串在Perl中正則表達式安全

+0

[我如何處理Perl正則表達式中的特殊字符?](http://stackoverflow.com/questions/576435/how-do-i-handle-special-characters-in-a-perl-正則表達式) – daxim 2011-03-25 14:28:00

回答

13

是,使用\Q and \E escapes

#!/usr/bin/perl 

use strict; 
use warnings; 

my $text = "a+"; 

print 
    $text =~ /^$text$/  ? "matched" : "didn't match", "\n", 
    $text =~ /^\Q$text\E$/ ? "matched" : "didn't match", "\n"; 
1

如果你想逃避字符串中的正則表達式所有的特殊字符,你可以一樣好使用RINDEX像

index($_, "$mystring_03") 

此返回字符串的索引您想要測試的字符串,如果找不到匹配,則返回-1。

+1

整個正則表達式可能不在字符串中。 – 2010-09-02 17:06:31

+0

@Chas。歐文斯如果整個正則表達式(在引用之後)不在字符串中,它不會匹配,是嗎?我沒有關注......什麼時候一個完全引用的正則表達式會給出一個子字符串檢查的不同結果? – 2010-09-02 17:17:55

+0

爲什麼提到'rindex'而不提'索引'? – mob 2010-09-02 17:22:12

10

quotemeta功能做你所要求的。

+0

'quotemeta'是'\ Q'和'\ E'轉義函數的接口。 – 2010-09-02 17:05:36

相關問題