我有一个html输入元素,我需要使用两个单独的正则表达式(Java)来提取名称和值。
<INPUT type="hidden" id="Region" value="Circuits Japan" checked="false">
我需要使用2种不同的正则表达式从上面提取Region and Circuits Japan。
对于id提取,我使用了像.*id=(.[^"]+
这样的东西,它给了我
Region value=Circuits Japan checked=false>
而我正试图仅提取“地区”。 任何输入将非常感激。
干杯: - )
答案 0 :(得分:2)
如果输入元素在您的控制之下,则应使用属性值的引号,即:
<INPUT type="hidden" id="Region" value="Cirvuits Japan" checked="false">
然后使用:
Pattern p = Pattern.compile( " id=\"(.*?)\" value=\"(.*?)\"" );
Matcher m = m.matcher( inputString );
if ( m.find() ) {
String id = m.group(1);
String value = m.group(2);
...
}
如果您无法控制报价,请使用:
Pattern p = Pattern.compile( " id=(.*?) value=(.*?) checked=" )
...
答案 1 :(得分:1)
除非另有说明,+
运算符是贪婪的...这意味着它将尽可能多地匹配。在你的情况下,这意味着它一直到最后"
。要在不贪婪的情况下进行+
匹配,请添加以下?
。 E.g:
.*id=(.[^"]+?)
然后你应该得到你期望的价值。
答案 2 :(得分:0)
首先:使用单个正则表达式解析html的属性很难,因为属性的顺序可能会有所不同。
如果你想做多次传球,那并不难。
鉴于您没有"
,那么id的正则表达式将是:
id=(\\S+)
当然你无法像这样解析多个单词属性。您只需要"
来正确表示这些属性。假设您的多字属性为"
,那么您应该使用:
someAttribute=\\"([^"]+)
答案 3 :(得分:-1)
您考虑过Apacke Tika,here是一个展示如何使用它的博客。