这是 HTML 代码:
<td class="foobar" id="12345POE46" data="more & data">
<a href="http://www.stackoverflow.com" more="{data}">Value</a> </td>
现在,我对正则表达式并不陌生,但我对 Java 中的正则表达式并不陌生。我唯一不知道的是如何在 Java 中使用这个正则表达式,这是我用来从代码中提取值的那个:
(?s)<td class="foobar".*?<a.*?>(.*?)</a>.*?</td>
我需要 ,因为和(?s)
之间有换行符。<td>
<a>
根据我的研究,我在 Java 中需要做的就是将DOTALL
参数传递给模式编译函数:
p = Pattern.compile(regex, Pattern.DOTALL);
然后这个正则表达式应该工作:
<td class="foobar".*?<a.*?>(.*?)</a>.*?</td>
因为 DOTALL 参数的行为应该像(?s)
标志。
但它不起作用。我搜索了一段时间,但无法找出问题所在。
这就是我阅读 HTML 代码的方式:
URL web = new URL(webURL);
URLConnection gate = web.openConnection();
BufferedReader in = new BufferedReader(new InputStreamReader(gate.getInputStream()));
String inputLine = in.readLine();
更新:
我用我的正则表达式测试了相同的代码,它在我尝试过的所有在线正则表达式测试器中都能完美运行(带有
(?s)
标志)。我用 Python 编写了所有代码,一切都相同,并且
(?s)
当我从通过 Java 索引的网页 HTML 中放入相同的字符串时,它与标志完美配合。