HTML正则表达式的Java正则表达式解析

时间:2018-08-11 07:57:06

标签: java regex

我将编写一个程序,在其中我逐行读取一个jsp文件并使用正则表达式检查页面中是否有任何select标记。如果是,那么我想提取<option>DATA</option>标签之间的数据。

我写了以下正则表达式here at regex101

(?:<select.*>\n?\s+(.*<option.*>$.*)\n?\s+<\/select>.*)

那些不了解regex101的人,还可以使用左上方的侧边栏查看regex的Java代码。

问题是正则表达式与字符串不匹配:

<select name="javaType">
  <option value="boolean">boolean</option> 
  <option value="byte">byte</option> 
  <option value="char" selected>char</option> 
  <option value="double">double</option> 
  <option value="float">float</option> 
  <option value="int">int</option> 
  <option value="long">long</option> 
</select>

我想提取标签之间的数据。我知道我的正则表达式不完整,但是我不知道该如何进行。

我是否逐行解析并首先检查选择标签,然后再次检查标签?还是使用正则表达式有更好的方法?

3 个答案:

答案 0 :(得分:0)

为什么不使用一些html解析器来处理它? 您的问题不是很具体。

我认为您可能想检查选择了哪个选项。 根据我的理解,我给出了一个简单的正则表达式。

selected\>(?<selected>(\w+))<

已选择selected的命名模式。

答案 1 :(得分:0)

您在正则表达式中使用look aheads(?:)查找模式。为此,所有内容都必须放在一行中。如果您想为bash找到一个正则表达式,那么我们可以使用tr -s '\n' ' '将字符串转换为一行,然后向前看可能会有所帮助。

我们也可以在Java中做类似的事情,但是我建议您一个接一个地循环遍历文件行,搜索<select,一旦找到它,请使用正则表达式在{{1 }},直到找到`。

希望下面的代码有帮助

option

答案 2 :(得分:0)

以下是匹配的正则表达式:

/(?:<select.*?>.*?((<option.*?<\/option>\s*)+)<\/select>.*)/ims

通过使用s选项,您可以摆脱在特殊情况下尝试匹配换行符的麻烦。

第一个捕获组捕获所有选项标签,第二个捕获组捕获最后一个选项标签。您可能需要分两个步骤进行操作,处理第一个捕获组捕获的内容,以将其分解为所有单独的选项标签。

regex101:https://regex101.com/r/lLbsVy/5