0

我有以下有效的代码:(标准文本字符串)

($txid) = $content =~ m/ start (.*) stop /;
print $txid;

以及以下不包含的代码:(带引号的字符串)

($txid) = $content =~ m/<input name="transactionid" value="(.*)" type="hidden">/;
print $txid;

我猜问题是由引号引起的。有谁知道我该如何解决这个问题?

4

1 回答 1

0

默认情况下,*量词是“贪婪的”,这意味着(.*)将匹配它可能匹配的所有内容。为了限制它以使其尽可能少地匹配,即仅在字符串中出现下一个双引号之前,添加 a?到它,因此:

($txid) = $content =~ m/<input name="transactionid" value="(.*?)" type="hidden">/;

假设value属性的值不包含转义的双引号,这将产生您所追求的结果。

(当然,在存在转义双引号的情况下,没有正则表达式可以可靠地仅提取感兴趣的字符串而没有其他内容。这就是为什么人们告诉您不要将正则表达式用作解析平衡文本的唯一工具。在另一方面,考虑到您在这里的目的很简单,您可能会侥幸成功——但是对于任何需要 HTML 或 XML 处理甚至比这更复杂的东西,请使用 XML 解析器 )

于 2013-07-19T14:20:48.413 回答