Reg Expression - 在<h3>标签之间分割2个字符串</h3>

时间:2012-08-01 20:15:25

标签: regex

我一直坚持找到一个reg表达式来将html元素拆分为2个部分。首先是价格和第二次下载。这是我的HTML,这是我尝试使用的reg表达式。我正在使用一个更糟糕的程序,所以我 cant 使用java-script或jQuery。

HTML:

<h2>$850 / 3Downlaods - Software Name</h2>

Re Expression之前使用了Marker:

/$\/\s*/

重新表达使用标记后:

/\/\

这应该只返回850。没有美元符号。我坚持如何开始和结束下载次数。我需要另一套Before and After正则表达式来提取下载次数。同时不包括“downloads”一词。

我使用的程序是OutWit Hub Scarper Link to docs

2 个答案:

答案 0 :(得分:1)

如果<h2>中没有其他嵌套代码(要考虑更复杂),则由()分隔的两个/捕获组应该执行此操作:

/<h2>\s*\$(\d+)\s*\/\s*(\d+)\s*Downloads.+?<\/h2>/

这会分解为<h2>,可选空格\s*$,要捕获的一些数字(\d+)/两侧的更多可选空格},一组要捕获的数字,Downloads之前的更多可选空格,任何字符(非贪婪)直至结束</h2>

如果价格部分也可能包含,.,则(\d+)组可以替换为([0-9.,]+)(或者更具体,以确保它不以{{1}开头如果有必要,例如)

,

有关使用正则表达式解析HTML的常见警告适用于此处。只有当您的HTML输入具有可预测性且/<h2>\s*\$([0-9,.]+)\s*\/\s*(\d+)\s*Downloads.+?<\/h2>/ 内没有标记嵌套时,这才能成功。

答案 1 :(得分:1)

试试这个:(?:.*\$)(\d+(?:\.\d+)?).*(\d+)(?:\s*Downloads.*)

这是发生了什么:

(?:.*\$) - 捕获并丢弃标记的开头,一直到美元符号后找到的第一个数字

(\d+(?:\.\d+)?) - 获取一美元金额(包括美分)

.* - 两个数字之间的任何废话

(\d+) - 下载次数

(?:\s*Downloads.*) - 标记的其余部分

我希望有所帮助!