作者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
1F:推 LiloHuang:$_ = '.'; print 'Match' if(/\Q.\E/); 01/07 14:42
2F:推 qrtt1:那你用 index 函式不就好了 01/07 14:43
3F:→ Daira:To 1楼,我的问题已经解决了!非常感谢您! ~^^~ 01/07 15:11
4F:→ Daira:To 2楼,因为在 $pattern 的前後会用到其它的 RegExp 01/07 15:12
5F:推 PsMonkey:用 .. 来判断,另外,有 RegExp 版可以讨论 01/07 15:49