我有一个字符串,其中包含多次出现的 "<p class=a> ... </p>"
,其中 ... 是不同的文本。
我正在使用 "<p class=a>(.*)</p>"
正则表达式模式将文本拆分为 block 。但这不起作用。正确的正则表达式是什么?
附注相同的正则表达式模式在使用 NSRegularExpression 的 iOS 中工作,但在使用 Pattern 的 Android 中不起作用。
为了更多地解释我的问题:我正在执行以下操作
Pattern regex3 = Pattern.compile("(?s)<P Class=ENCC>(.*?)</P>", CASE_INSENSITIVE);
String[] result = p.split(str);
结果数组仅包含 1 项,并且是整个字符串
以下是我正在阅读的文件的一部分:
<BODY>
<SYNC Start=200>
<P Class=ENCC><i>Cerita, Watak, Adegan dalam</i><br/><i>Drama Ini Rekaan Semata-Mata.</i></P>
</SYNC>
<SYNC Start=2440>
<P Class=ENCC> </P>
</SYNC>
<SYNC Start=2560>
<P Class=ENCC><i>Kami Tidak Berniat</i><br/><i>Melukakan Hati Sesiapa.</i></P>
</SYNC>
<SYNC Start=4560>
<P Class=ENCC> </P>
</SYNC>
<SYNC Start=66160>
<P Class=ENCC>Hai kawan-kawan.<br/>Inilah bandaraya Banting.</P>
</SYNC>
更新:::
大家好,我遇到了问题。问题实际上出在我正在读取的文件的编码上。该文件采用 UTF-16(Little Endian)编码。这导致了正则表达式不起作用的所有问题。我将其更改为 UTF-8,一切开始正常工作..感谢大家的支持。
最佳答案
使用正则表达式解析 HTML 并不是一个好主意(原因 here )。您应该在 HTML 解析器中使用什么,例如 this .
话虽如此,您的问题很可能是 *
运算符是贪婪的。在你的问题中,你只是说它不起作用,所以我认为你的问题是因为它匹配第一个 <p class=a>
最后一个</p>
。使正则表达式非贪婪,如下所示:<p class=a>(.*?)</p>
(注意额外的 ?
以使 *
运算符不贪婪)应该可以解决问题(假设您的问题是我之前提到的问题)。
话虽这么说,我真的建议您放弃正则表达式方法并使用适当的 HTML 解析器。
关于java - 如何使用正则表达式匹配字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11203885/