作者Daira (Daira)
看板Perl
標題[問題] 正規表示法:有關強制使用原始文字比對的問題
時間Mon Jan 7 14:39:17 2008
我有一個放字串的變數(假設是 $pattern)
然後我想在另一個變數(假設是 $string)中比對是否存在 $pattern
所以我寫成
$string =~ /$pattern/;
但是現在的問題是如果 $pattern 裡有包含正規表示法的特殊字元(如 \ . * ? + 等)
會被當成正規表示法的一部份去解譯
但我不希望發生這樣的事,我想單純讓 $pattern 當做文字來比對就好
我本來是打算用
$pattern =~ s/(\\|\.|\*|\?|\+)/\\\1/g;
先把 $pattern 裡的特殊字元都取代成跳脫字元,再來做處理
但是我認為這不是正確的解決辦法,所以想來問大家有沒有比較快速的解決辦法
(不然就要每次做比對前都要先取代一次 >"<)
* * * *
怕有人看不懂我的意思,所以我舉個例子
$pattern = '.';
當 $string =~ /$pattern/; 時
只要 $string 有任意字元,就會傳回 true 了
但這不是我要的
我的目的是真的要看 $string 裡是否有 '.' 字元 ^^"
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.130.193.181
推 LiloHuang:$_ = '.'; print 'Match' if(/\Q.\E/); 01/07 14:42
推 qrtt1:那你用 index 函式不就好了 01/07 14:43
→ Daira:To 1樓,我的問題已經解決了!非常感謝您! ~^^~ 01/07 15:11
→ Daira:To 2樓,因為在 $pattern 的前後會用到其它的 RegExp 01/07 15:12
推 PsMonkey:用 .. 來判斷,另外,有 RegExp 版可以討論 01/07 15:49