【发布时间】:2014-11-03 10:12:44
【问题描述】:
我正在尝试将下面提到的正则表达式与\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";
}
任何线索
根据用户 cmets,我正在编辑一些帖子。
我现在明白为什么它与\W 匹配。以下是我开始使用\b的问题
PROVFEADDR 是要匹配的变量。在这种特殊情况下,我必须匹配PROVFEADR=。之前我们使用\W+ 而不是\b。使用\W+,问题是我们必须在字符串末尾匹配。 \W+ 期望至少有一个 \W 如果它位于字符串的最后一个则不存在。所以我用在上述场景中工作的\b 替换。有什么可以处理这两种情况的建议吗?
【问题讨论】:
-
你的意思是它不匹配
\b,而是匹配\W,对吧? -
@YuHao:是的,它与\b不匹配
-
假设余浩是正确的,你的意思是相反的:
\b是单词边界:它的左右字符必须是一个单词字符,一个非单词字符。=和"都是非单词,因此\b无法匹配。 -
我不明白为什么您必须在
PROVFEADDR=之后匹配 anything (尽管您几乎可以肯定需要匹配词边界 before如果它是一个标识符,则它)。/\bPROVFEADDR=/不会吗?甚至只是/\bPROVFEADDR\b/,但您没有正确解释您要实现的目标。