Regex 为什么字符串不匹配?

Regex 为什么字符串不匹配?,regex,perl,strawberry-perl,wordpad,Regex,Perl,Strawberry Perl,Wordpad,我有一个写字板文件,从中提取两个字符串并比较它们。在本例中,它们都是相等的,但我不能使用=~表达式来计算它们 if($pin_list =~ /$lvl_list/){ do something} 我在调试模式下尝试的内容: 通过eq 根据= 手动将另一个变量设置为同一字符串,然后使用新变量执行if语句如果($pin_list=~/$x/){do something}。这一尝试是成功的 对两个字符串变量执行几次chomp(var),然后运行代码。失败 通过两个VAR上的$tst\u pins=

我有一个写字板文件,从中提取两个字符串并比较它们。在本例中,它们都是相等的,但我不能使用
=~
表达式来计算它们

if($pin_list =~ /$lvl_list/){ do something}
我在调试模式下尝试的内容:

  • 通过
    eq
  • 根据
    =
  • 手动将另一个变量设置为同一字符串,然后使用新变量执行
    if
    语句<代码>如果($pin_list=~/$x/){do something}。这一尝试是成功的
  • 对两个字符串变量执行几次
    chomp(var)
    ,然后运行代码。失败
  • 通过两个VAR上的
    $tst\u pins=~s/\n//g
    删除了回车符。失败
  • 两个变量的长度相同
  • 手动打印两个VAR,并目视验证两个字符串是否相同
  • 有人有什么想法吗?我怀疑这与写字板有关,也许是一个隐藏的字符,但我不知道如何找到它


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


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

    我有一个用“+”连接的字符串。因此字符串如下所示:

    “1+2+3+4+a+b+等”

    “+”最终成为问题所在。在一位同事的建议下,我表演了一个substr,并将其中一根弦削到了令人不快的地方。它刚好在捕获“+”之后发生。然后我加入了,用空格代替了“+”,一切正常

    使用字母表以外的不同字符会产生影响,我仍然无法解释为什么其他所有字符都表示相同


    Bret

    +
    和其他字符在正则表达式中有特殊的含义,因此仅使用
    $expression=~/$some\u任意字符串/
    可能会给您带来麻烦

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

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

    +
    和其他字符在正则表达式中有特殊的含义,因此仅使用
    $expression=~/$some\u arbitral\u string/
    可能会给您带来麻烦

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

    if (index($pin_list, $lvl_list) >= 0) {
        do_something;
    }
    
    匹配运算符(
    m/
    aka
    /
    )检查提供的字符串是否与提供的正则表达式模式匹配,而不是检查它是否是与提供的正则表达式模式相等的字符对字符。如果要构建与字符串完全匹配的正则表达式模式,请使用

    这将检查
    $str1
    是否等于
    $str2

    my $pat = quotemeta($str1);
    $str2 =~ /^$pat\z/
    
    quotemeta
    也可以通过
    \Q..\E
    调用

    $str1 =~ /^\Q$str2\E\z/
    
    当然,您可以使用
    eq

    $str1 eq $str2
    
    匹配运算符(
    m/
    aka
    /
    )检查提供的字符串是否与提供的正则表达式模式匹配,而不是检查它是否是与提供的正则表达式模式相等的字符对字符。如果要构建与字符串完全匹配的正则表达式模式,请使用

    这将检查
    $str1
    是否等于
    $str2

    my $pat = quotemeta($str1);
    $str2 =~ /^$pat\z/
    
    quotemeta
    也可以通过
    \Q..\E
    调用

    $str1 =~ /^\Q$str2\E\z/
    
    当然,您可以使用
    eq

    $str1 eq $str2
    

    如果他们是
    eq
    ,你为什么不使用它呢???你可以为你的解决方案创建一个答案,而不是将它添加到你的问题中吗?这样,其他人可以更容易地看到解决方案。你甚至可以接受自己的答案,并收集一些代表点,如果你喜欢的话!:)如果他们是
    eq
    ,你为什么不使用它呢???你可以为你的解决方案创建一个答案,而不是将它添加到你的问题中吗?这样,其他人可以更容易地看到解决方案。你甚至可以接受自己的答案,并收集一些代表点,如果你喜欢的话!:)假设这是Perl,您还可以使用\Q和\E在匹配表达式中自动引用变量的内容。假设这是Perl,您还可以使用\Q和\E在匹配表达式中自动引用变量的内容。