java - 单个模式中的多个匹配项?

标签 java html regex

我的输入字符串包含如下字符串:

<image id="1234" caption="text1" alt="text2"> ...等等等等...

输入中可以有多个此类字符串的实例。

我想检索该字符串的属性(标题、alt 等)以及 id,然后打印 id、alt、标题等。可以有没有任何属性而只有 id 的图像。

请指教。

最佳答案

首先要做的事情:Don't parse xml or [x]html with regex ,这通常被认为不是一个好方法。

但我知道,对于快速+肮脏的应用程序,您不想处理第 3 方库。但您必须考虑以下问题,这使得正则表达式成为更糟糕的方法:

  • 您的 xml 有效还是包含“损坏”标签?
  • 属性的顺序总是相同吗?或者caption有时出现在alt之前有机会吗?
  • 您已经说过一些image标签只包含id标签

这些(以及更多)方面决定了正则表达式解决方案的复杂性。 您需要一个双循环才能获取所有所需的数据。

  • 查找所有图像标签:(<image[^>]+)> (假设属性值中没有 > 字符)
  • 然后,在 image 内您找到的标签,请使用:[ ]+([a-zA-Z0-9]+)="([^"]*)"

我希望您已经看到这非常困惑,并且没有涵盖有效 xml 的所有情况!

XML 解析器始终是正确的方法。

关于java - 单个模式中的多个匹配项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6897999/

相关文章:

java - 如何在 Java 中创建 GUI?

c# - 基于开始/结束位置的字符串中的粗体选择性文本

javascript - 根据特定的字符序列将文本分成组

php - 使用正则表达式替换段落标记

html - CSS 网格 - 跨行

java - 当末尾的行不属于 .csv 数据的一部分时,Univocity 解析器如何正确读取 .csv 文件的数据?

java - getEngineByName ("JavaScript"的 ScriptEngine 为空)?

java - portlet Java 类实例是否与 1 :1 with Liferay portlet web "instances"? 相关

html - CSS 表结构问题

在 html 模板上附加/前置 div 的 javascript 逻辑