我有一个字符串,其中包含"<p class=a> ... </p>"
的多次出现,其中......是不同的文本。
我正在使用"<p class=a>(.*)</p>"
正则表达式模式将文本拆分为块。但这不起作用。什么是正确的正则表达式?
P.S。相同的正则表达式模式在iOS中使用NSRegularExpression但在使用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,一切都开始工作了......感谢所有人的支持。
答案 0 :(得分:2)
使用正则表达式解析HTML并不是一个好主意(原因here)。您应该在HTML解析器中使用什么,例如this。
话虽如此,你的问题很可能是*
运营商贪婪的事实。在您的问题中,您只是说它不起作用,所以我认为您的问题是因为它匹配第一个<p class=a>
和最后一个</p>
。使正则表达式非贪婪,如下所示:<p class=a>(.*?)</p>
(注意额外的?
以使*
运算符不贪婪)应该解决问题(假设你的问题是我的问题)如前所述)。
话虽这么说,我真的建议你放弃正则表达式方法并使用适当的HTML解析器。
答案 1 :(得分:1)
修改强>
现在您已经发布了与之匹配的代码和文本,有一件事立即浮现在脑海中:
您正在匹配<p class...
,但您的字符串包含<P Class...
。正则表达式区分大小写。
然后,.
与换行符不匹配。而且你的段落很可能包含换行符。
因此,请尝试"(?si)<p class=a>(.*?)</p>"
。 (?s)
修饰符也允许点匹配换行符,(?i)
修饰符使正则表达式不区分大小写。
答案 2 :(得分:0)
我想问题是你的模式是贪婪的。你应该改用它。
"<p class=a>(.*?)</p>"
如果你有这个字符串:
"<p class=a>fist</p><p class=a>second</p>"
您的模式("<p class=a>(.*)</p>"
)将与此匹配
"<p class=a>fist</p><p class=a>second</p>"
虽然"<p class=a>(.*?)</p>"
仅匹配
"<p class=a>fist</p>"
答案 3 :(得分:0)
。* 可能与&lt; 匹配。你可以尝试:
<p class=a>([^<]*)</p>