我有如下场景,
从一个字符串中需要提取的子串很少,
例子: 主字符串:
<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/