正则表达式捕获引号之间的子串

时间:2013-07-19 14:11:31

标签: regex perl html-parsing

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

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

以下代码中没有:(带引号的字符串)

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

我猜这个问题是由引号引起的。有谁知道我怎么能解决这个问题?

1 个答案:

答案 0 :(得分:0)

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

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

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

(当然,在 转义双引号的情况下,没有正则表达式可以可靠地提取感兴趣的字符串而没有别的。这就是为什么人们告诉你不要使用正则表达式作为解析平衡文本的唯一工具。另一方面,考虑到你的目的简单,你可能会放弃它 - 但对于任何事情,我的意思是任何,这需要HTML或XML处理甚至比这更复杂,使用XML解析器。)