【发布时间】:2016-03-09 07:16:47
【问题描述】:
我必须解析一些 html 以从一些 HTML 中找到一组值,这些值并不总是格式正确,我无法控制(所以 Scanner 似乎不是一个选项)
这是一个购物车,购物车中有 n 行,每行包含一个数量下拉菜单。现在我希望能够获得购物车中产品的总和。
鉴于这个 html,我想匹配值 2 和 5
...
<select attr="other stuff" name="quantity">
<option value="1" />
<option value="2" selected="selected" />
</select>
....
<select name="quantity" attr="other stuff">
<option selected="selected" value="5" />
<option value="6" />
</select>
我做了一些可怜的尝试,但考虑到变量的数量(例如“值”和“选定”标签的顺序),我的大多数解决方案要么不起作用,要么真的很慢。
我最后使用的 Java 代码如下
Pattern pattern = Pattern.compile("select(.*?)name=\"quantity\"([.|\\n|\\r]*?)option(.*?)value=\"(/d)\" selected=\"selected\"", Pattern.DOTALL);
Matcher matcher = pattern.matcher(html);
if (matcher.find()) {
....
}
当属性顺序改变时,它很慢并且不起作用。我的正则表达式知识不足以编写有效的模式
【问题讨论】:
-
你需要使用\\d来匹配数字不是(/d)
-
在使用正则表达式解析 HTML 时,尽可能避免使用惰性点匹配,因为可能会出现 超时(我了解到,@Casimir:))问题。跨度>
-
你能建议一种重写它的方法吗?我一直在研究向前/向后查找,但我不确定我是否“得到”它们
-
是
selected="selected选项标签中唯一的其他量词吗? -
如果有人想重温过去:stackoverflow.com/a/1732454/821786