我将编写一个程序,在其中我逐行读取一个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>
我想提取标签之间的数据。我知道我的正则表达式不完整,但是我不知道该如何进行。
我是否逐行解析并首先检查选择标签,然后再次检查标签?还是使用正则表达式有更好的方法?
答案 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