【问题标题】:Capture html tag with attributes and values?捕获带有属性和值的html标签?
【发布时间】:2018-10-16 07:54:27
【问题描述】:

我在 java 中有一个完整的 html 文件输入作为字符串(我也有文件)。文字如下所示

Sample input
    Some text........... <s:message code="code1" arguments="${arg1,arg2}" />..
    some text  ........
    some text  ....... <s:message code="code2" 
     />...........

基本上我需要根据代码类型替换所有文本。例如,如果代码为 code1,则将 s:message 标记替换为 test1

sample output
    Some text........... test1..
    some text  ........
    some text  ....... test2 ...........

我不知道如何捕获完整的&lt;s:message &gt;,然后将其替换为其他文本?看起来我需要在这里使用正则表达式,但是 不知道如何开始?

更新:-

code1 和 test1 只是示例,它们可以是任何值。 code1 可以是 xyz,也可以用 abc 代替。这就是为什么我想捕获所有消息标签(遍历时或一口气),然后获取代码,执行一些逻辑并查看替换值是什么。

方法2:- 还有另一种方法,我有数据结构中的代码列表,对于每个代码检查是否有任何封闭的消息标签,捕获它然后处理它。

【问题讨论】:

标签: java regex string


【解决方案1】:

它似乎是 XML,您最好使用解析器来查找节点并将其替换为您想要的文本。使用正则表达式执行此操作相当成败(尤其是当您的条件上升时)。但这里有一个解决这个特定问题的方法:

String regex = '<s:message\\b[^>]*?"code(\\d+)"[^>]*>';

并将匹配替换为test$1:

string = string.replaceAll(regex, "test$1");

Live demo

【讨论】:

  • 我不知道 OP 是否关心,但这不适用于 &lt;s:message code="&lt;code2&gt;" /&gt; 或类似情况。再说一次,不知道 OP 是否关心,这可能很好
  • @YassinHajaj 对我来说 例如,如果代码 is code1 表示 code="code1"。我的意思是我不会从中推断出 includes,但如果你这样做,那将是完全不同的事情。
  • @revo code1 和 test1 只是示例,它们可以是任何值。 code1 可以是 xyz,也可以用 abc 代替。这就是为什么我要捕获所有消息标签(遍历时或一口气),然后获取代码,执行一些逻辑并查看替换值是什么。
  • @revo 看看如果原始要求有点棘手,方法 2 是否易于在我的帖子中实现?
  • @emilly 你现在已经改变了整个需求。如果您需要根据捕获的数据解决替换字符串,那么您将需要类似 stackoverflow.com/questions/19737653/… 的内容
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-28
  • 2023-03-29
  • 1970-01-01
相关资源
最近更新 更多