我有一个Wordpad文件,我从中提取两个字符串并进行比较。在这种情况下,它们都是相同的,但我不能使用=~
表达式来评估它们。
if($pin_list =~ /$lvl_list/){ do something}
我在调试模式下尝试过:
eq
==
if
语句; if($pin_list =~ /$x/){do something}
。这次尝试很成功。chomp(var)
,然后运行代码。 FAILED $tst_pins =~ s/\n//g
删除回车。 FAILED 有人有任何想法吗?我怀疑它与写字板有关,也许是一个隐藏的字符,但不知道如何跟踪它。
tchrist - >好问题。在这种情况下,字符串是相等的,但情况并非总是如此。在正常情况下,我只是寻找一个字符串作为另一个字符串的子集。
对于那些可能感兴趣的人。问题解决了。
我有一个字符串,我'加'与'+'。所以字符串如下所示:
“1 + 2 + 3 + 4 + A + B +等”
'+'最终成了问题。在一位同事的建议下,我执行了一个substr并将其中一个字符串缩小到了违规点。它在捕获'+'之后发生。然后我使用空格而不是'+'加入,一切正常。
使用字母表以外的其他字符会产生影响,我仍然不知所措,以解释为什么当其他所有字母都相同时。
布雷特
答案 0 :(得分:4)
匹配运算符(m//
又名//
)检查提供的字符串是否与提供的正则表达式模式匹配,而不是字符的字符是否等于提供的正则表达式模式。如果要构建与字符串完全匹配的正则表达式模式,请使用quotemeta
。
检查$str1
是否等于$str2
:
my $pat = quotemeta($str1);
$str2 =~ /^$pat\z/
quotemeta
也可以通过\Q..\E
调用。
$str1 =~ /^\Q$str2\E\z/
当然,你可以使用eq
。
$str1 eq $str2
答案 1 :(得分:3)
+
和其他字符在正则表达式中具有特殊含义,因此只使用$expression =~ /$some_arbitrary_string/
会让您遇到麻烦。
如果问题是一个字符串是否确实包含在另一个字符串中,您可以使用index
而不用担心指定正则表达式的所有规则:
if (index($pin_list, $lvl_list) >= 0) {
do_something;
}