2011-04-14 143 views
1

我有一个写字板文件,我从中提取两个字符串并进行比较。在这种情况下,它们都是相等的,但我不能用=~表达式来评估它们。为什么字符串不匹配?

if($pin_list =~ /$lvl_list/){ do something} 

我在调试模式下曾尝试:

  1. 两个字符串是相等的eq
  2. 通过==
  3. 为评估手动设置另一个变量相同的字符串两个字符串是相等的评估然后用新变量执行if语句; if($pin_list =~ /$x/){do something}。这次尝试是成功的。
  4. 几次对两个字符串变量执行chomp(var),然后运行代码。失败
  5. 在两个变速箱上通过$tst_pins =~ s/\n//g删除回车。失败
  6. 两个变量的长度是相同的。
  7. 手动打印两个字符串并视觉验证两个字符串是相同的。

任何人有任何想法?我怀疑这是与写字板有关的事情,也许是一个隐藏的字符,但不知道如何追踪它。


tchrist - >好问题。在这种情况下,字符串是平等的,但情况并非总是如此。在正常情况下,我只是寻找一个字符串作为另一个字符串的子集。


对于那些可能感兴趣的人。问题解决了。

我有一个字符串,我'加入'与'+'。因此字符串看上去像以下:

“1 + 2 + 3 + 4 + A + B +等”

的 '+' 结束了该问题。在一位同事的建议下,我执行了一个子任务,并削减了其中一个字符串到违规点。它发生在刚刚捕获'+'之后。然后我使用空格而不是'+'加入,并且一切正常。

使用字母以外的其他字符会产生影响,我仍然无法解释为什么其他人都说它是平等的。

布雷特

+1

如果他们是'eq',你为什么不用这个? – tchrist 2011-04-14 18:44:16

+2

您能否为您的解决方案创建一个答案,而不是将其添加到您的问题中?这样,其他人可以更容易地看到解决方案。你甚至可以接受你自己的答案,并收集一些重点,如果你进入了! :) – 2011-04-14 19:02:46

回答

3

+和其他字符具有正则表达式中的特殊含义,所以只是用$expression =~ /$some_arbitrary_string/可以让你陷入困境。

如果问题是一个字符串是否字面上包含在另一个字符串,您可以使用index而不用担心所有的规则指定的正则表达式:

if (index($pin_list, $lvl_list) >= 0) { 
    do_something; 
} 
+2

假设这是Perl,您还可以使用\ Q和\ E自动在匹配表达式中引用变量的内容。 – Neil 2011-04-14 19:08:55

4

匹配操作符(m//又名//)检查如果提供的字符串与提供的正则表达式模式相匹配,则不是该字符的字符等于提供的正则表达式模式。如果你想建立一个正确匹配字符串的正则表达式模式,使用quotemeta

这用来检查$str1等于$str2

my $pat = quotemeta($str1); 
$str2 =~ /^$pat\z/ 

quotemeta也可以通过\Q..\E被调用。

$str1 =~ /^\Q$str2\E\z/ 

当然,您可以使用eq

$str1 eq $str2 
相关问题