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> </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>
切里塔、瓦塔克、阿德根·达拉姆的戏剧
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内容)。也