为什么字符串不匹配?

| 我有一个写字板文件,可从中提取两个字符串并进行比较。在这种情况下,它们都是相等的,但是我不能使用
=~
表达式来求值。
if($pin_list =~ /$lvl_list/){ do something}
我在调试模式下尝试过的方法: 两个字符串都等于by2ѭ 两个字符串都等于by3ѭ 手动将另一个变量设置为相同的字符串,然后使用新变量执行“ 4”语句;
if($pin_list =~ /$x/){do something}
。此尝试成功。 在两个字符串变量上多次执行“ 6”,然后运行代码。失败 通过两个变量上的
$tst_pins =~ s/\\n//g
除去回车。失败 两个变量的长度相同。 手动打印的两个变量和视觉验证的两个字符串都相同。 任何人有任何想法吗?我怀疑这与写字板和一个隐藏的字符有关,但不知道如何对其进行跟踪。 tchrist->好问题。在这种情况下,字符串是相等的,但情况并非总是如此。在正常情况下,我只是在寻找一个字符串作为另一个字符串的子集。 对于那些可能感兴趣的人。问题解决了。 我有一个\'join \'与\'+ \'的字符串。因此该字符串如下所示: \“ 1 + 2 + 3 + 4 + a + b + etc \” \'+ \'最终成为问题。在一位同事的建议下,我进行了一次substr调试,然后将其中一根弦降低到了令人讨厌的地步。它在捕获\'+ \'之后发生。然后,我使用空格而不是\'+ \'加入,一切正常。 使用除字母以外的其他字符将产生影响,我仍然不知所措,无法解释为什么其他所有条件都相同时。 布雷特     
已邀请:
匹配运算符(
m//
aka
//
)检查所提供的字符串是否与所提供的正则表达式模式匹配,而不是其字符是否等于所提供的正则表达式模式。如果要构建与字符串完全匹配的正则表达式模式,请使用
quotemeta
。 这检查
$str1
是否等于
$str2
my $pat = quotemeta($str1);
$str2 =~ /^$pat\\z/
也可以通过via15ѭ来调用
quotemeta
$str1 =~ /^\\Q$str2\\E\\z/
当然,您可以只使用
eq
$str1 eq $str2
    
regular19ѭ和其他字符在正则表达式中具有特殊含义,因此仅使用
$expression =~ /$some_arbitrary_string/
可能会给您带来麻烦。 如果问题是一个字符串是否确实包含在另一个字符串中,则可以使用
index
,而不必担心用于指定正则表达式的所有规则:
if (index($pin_list, $lvl_list) >= 0) {
    do_something;
}
    

要回复问题请先登录注册