我正在尝试将下面提到的正则表达式与\b
和\W
进行匹配。它与\b
不匹配,但与\W
my $response = "ABC-12-1-1::HELLO=TX,PROVFEADDR=\"\",ValueFORM=NAME-CITY-STREET-PRT,";
print "\n\n\n$response\n\n\n";
if ( $response =~ /PROVFEADDR=\b/ ) ##### matching with //PROVFEADDR=\W/
{
print "matched\n";
} else {
print "not matched\n";
}
任何线索
根据用户评论我正在编辑一点点。
我现在明白为什么它与\W
匹配。以下是我开始使用\b
PROVFEADDR
是要匹配的变量。在这种特殊情况下,我必须匹配PROVFEADR=
。之前我们使用\W+
代替\b
。使用\W+
时,问题是我们必须在字符串末尾匹配。 \W+
预计至少有一个\W
,如果它位于字符串的最后,则不存在\b
。所以我替换为在上述场景中工作的{{1}}。有什么建议可以处理这两种情况吗?
答案 0 :(得分:3)
\b
不匹配的原因是它旁边需要一个单词和一个非单词字符,并且你有两个非单词字符。
在您的评论中,您提到您正在寻找也匹配行尾的\W
的替代品,在这种情况下可以使用负前瞻断言:
if($response =~ /PROVFEADDR=(?!\w)/)
断言下一个字符不是字母数字字符。这也将匹配行尾(空字符串)。
答案 1 :(得分:1)
在$response
中,PROVFEADDR=
之后的字符是双引号,而不是单词,因此它与\W
(非单词)匹配。
它与\b
不匹配,因为它不是单词边界。将其与:
if($response =~ /PROVFEADDR\b=/)
此处,R
和=
之间是单词边界。