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)
,然后运行代码。失败$tst\u pins=~s/\n//g
删除了回车符。失败好问题。在这种情况下,字符串是相等的,但情况并非总是如此。在正常情况下,我只是寻找一个字符串作为另一个字符串的子集
对于那些可能感兴趣的人。问题解决了 我有一个用“+”连接的字符串。因此字符串如下所示: “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在匹配表达式中自动引用变量的内容。