java - 在java中查找子字符串模式

标签 java regex string

我有如下场景,

从一个字符串中需要提取的子串很少,

例子: 主字符串:

<title><spring:message code='cdc.header.title'/><br></span><span><p></p> <spring:message code='cdc.accessdenied.title'/></title>

所以我需要提取<spring:message code='cdc.header.title'/>,<spring:message code='cdc.accessdenied.title'/> ,

我的意思是那里有什么 spring 标签,我想检索那些子字符串作为 List<String> ,

我不想使用 XML 解析器,我想使用 java PATTERN 匹配器,因为我的文件可能格式不正确。

请帮我解决这个问题。 谢谢

最佳答案

使用这种方法,只需一行代码即可完成(根据评论更新了新要求):

List<String> springTags = Arrays.asList(str.replaceAll("(?s)^.*?(?=<spring)|(?<=/>)(?!.*<spring).*?$", "").split("(?s)(?<=/>).*?(?=<spring|$)"));

这通过首先剥离任何前导和尾随的 xml 包装/字符,然后拆分 xml 结束/开始标记来工作。它实际上会从任何类型的输入中提取所有 spring 标签——无论在 spring 标签之前或之后出现的都被丢弃。

下面是一些测试代码:

String str = "<title><spring:message code='cdc.header.title'/> <span></span></br><spring:message code='cdc.accessdenied.title'/></title>";
List<String> springTags = Arrays.asList(str.replaceAll("^.*?(?=<spring)|(?<=/>)(?!.*<spring).*?$", "").split("(?<=/>).*?(?=<spring|$)"));
System.out.println(springTags);

输出:

[<spring:message code='cdc.header.title'/>, <spring:message code='cdc.accessdenied.title'/>]

关于java - 在java中查找子字符串模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19828799/

相关文章:

java - Mockito:检测何时调用私有(private)资源上的方法

java - 带有运行时子组件的 Dagger 2 单例组件

c++ - "terminated by a zero"是什么意思?

regex - 前后没有字母数字字符的术语

php - PHP中的多行字符串

linux - 提取复杂字符串的片段

java - 严重 : JGRP000019: failed passing message to receiver: %s

java - JPA 没有 EntityManager 的持久性提供者

javascript - 正则表达式:动态替换搜索到的单词

regex - grep 与正则表达式的电话号码