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

标签 java android regex

我有一个字符串,其中包含多次出现的 "<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>&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>

更新:::

大家好,我遇到了问题。问题实际上出在我正在读取的文件的编码上。该文件采用 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/

相关文章:

regex - 为什么我的正则表达式不匹配并替换字符串以将 urlencode 转换为新字符串?

android - 从 Android 设备获取收件箱消息以显示在自定义 ListView 中

r - 在 R 中使用正则表达式和 tidyr 在匹配的第一个实例上拆分列变量

Java 模型映射器 : map DTO to EmbeddedId entity class

java - IntelliJ Git 集成插件 -> "New Branch"将大写 F 放入 "feature/abc"

java - 如何在android studio中更改apk文件名

Android 与 php 交互

python - 如何在 Python 中仅替换一次正则表达式?

java - Java/Android 的 zxing QR 阅读器库的替代品?

java - YouTube API v3 中的隐藏式字幕