Java 如何使用正则表达式匹配字符串

Java 如何使用正则表达式匹配字符串,java,android,regex,Java,Android,Regex,我有一个字符串,其中包含多次出现的“…”,其中。。。是不同的文本 我正在使用“(.*)”regex模式将文本分割成块。但这是行不通的。什么是正确的正则表达式 另外,相同的正则表达式模式在使用NSRegularExpression的iOS中工作,但在使用该模式的android中不工作 为了进一步解释我的问题:我正在做以下工作 Pattern regex3 = Pattern.compile("(?s)<P Class=ENCC>(.*?)</P>", CASE_INSENS

我有一个字符串,其中包含多次出现的

,其中。。。是不同的文本

我正在使用

(.*)

regex模式将文本分割成块。但这是行不通的。什么是正确的正则表达式

另外,相同的正则表达式模式在使用NSRegularExpression的iOS中工作,但在使用该模式的android中不工作

为了进一步解释我的问题:我正在做以下工作

Pattern regex3 = Pattern.compile("(?s)<P Class=ENCC>(.*?)</P>", CASE_INSENSITIVE);
String[] result = p.split(str); 
Pattern regex3=Pattern.compile((?)不区分大小写);
字符串[]结果=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>&nbsp;</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>&nbsp;</P>
    </SYNC>
    <SYNC Start=66160>
      <P Class=ENCC>Hai kawan-kawan.<br/>Inilah bandaraya Banting.</P>
    </SYNC>

切里塔、瓦塔克、阿德根·达拉姆的戏剧

Kami-Tidak-Berniat

海川河畔。
伊尼拉班达拉亚班廷。

更新:::


大家好,我有问题了。问题实际上是我正在读取的文件的编码。该文件是UTF-16(小端)编码的。这导致了regex无法工作的所有问题。我把它改成UTF-8,一切都开始工作了。。谢谢大家的支持。

我想问题是你的模式太贪婪了。你应该改用这个

"<p class=a>(.*?)</p>"

(.*)

如果您有此字符串:

"<p class=a>fist</p><p class=a>second</p>"

第一次

第二次

您的模式(

(.*)

)将与此匹配

"<p class=a>fist</p><p class=a>second</p>"

第一次

第二次

(.*)

仅匹配

"<p class=a>fist</p>"

拳头


我想问题在于你的模式是贪婪的。你应该改用这个

"<p class=a>(.*?)</p>"

(.*)

如果您有此字符串:

"<p class=a>fist</p><p class=a>second</p>"

第一次

第二次

您的模式(

(.*)

)将与此匹配

"<p class=a>fist</p><p class=a>second</p>"

第一次

第二次

(.*)

仅匹配

"<p class=a>fist</p>"

拳头


用正则表达式解析HTML并不是一个好主意(原因)。您应该在HTML解析器中使用什么,例如

话虽如此,您的问题很可能是
*
操作符贪婪这一事实。在你的问题中,你只是说它不起作用,所以我认为你的问题是因为它匹配了第一个

和最后一个

。使正则表达式非贪婪,如下所示:

(.*?

(注意使
*
操作符非贪婪的额外
)应该可以解决问题(假设您的问题是我前面提到的问题)


尽管如此,我还是建议您放弃正则表达式方法,使用适当的HTML解析器。

使用正则表达式解析HTML并不是一个好主意(原因)。您应该在HTML解析器中使用什么,例如

话虽如此,您的问题很可能是
*
操作符贪婪这一事实。在你的问题中,你只是说它不起作用,所以我认为你的问题是因为它匹配了第一个

和最后一个

。使正则表达式非贪婪,如下所示:

(.*?

(注意使
*
操作符非贪婪的额外
)应该可以解决问题(假设您的问题是我前面提到的问题)


也就是说,我真的建议您放弃正则表达式方法,使用适当的HTML解析器。

这个*可能匹配这个*可能匹配编辑:

现在,您已经发布了代码和匹配的文本,有一件事立即浮现在脑海中:

您正在匹配编辑:

现在,您已经发布了代码和匹配的文本,有一件事立即浮现在脑海中:


您正在匹配
您能提供匹配案例和非匹配案例的列表吗?@nikola:(.*)也不匹配working@sivaCharan::如果这是字符串

xxxxxxx

yyyyyyyyy

,那么

yyyyyyyyy

xxxxxx

应该是匹配的。您如何准确地使用正则表达式?请粘贴失败的代码。@TimPietzcker::我已经编辑了问题并粘贴了我正在使用的代码,同时也粘贴了文件的一部分,因为文件太大。你能提供匹配案例和不匹配案例的列表吗?@nikola:(*)也不是working@sivaCharan::如果这是字符串

xxxxxxx

yyyyyyyyy

,那么

yyyyyyyyy

xxxxxx

应该是匹配的。您如何准确地使用正则表达式?请粘贴失败的代码。@TimPietzcker::我已经编辑了问题并粘贴了我正在使用的代码,并且粘贴了文件的一部分,因为文件太大了。这实际上不是一个html文件(尽管它使用的是html标记)。它是使用html标记的排序或自定义字幕文件。而且它也没有经过验证(因为html文件中有其他非html内容)。另外,我也使用了

(.*)

,但它也不起作用。@g.revolution:如果是这样的话,我建议您提供更多信息,例如您实际拥有什么、您想要什么以及您实际得到什么。这实际上不是一个html文件(尽管它使用的是html标记)。它是使用html标记的排序或自定义字幕文件。而且它也没有经过验证(因为html文件中有其他非html内容)。也