gpt4 book ai didi

java - 正则表达式提取两个给定字符串之间最后一次出现的文本

转载 作者:太空宇宙 更新时间:2023-11-04 07:31:30 25 4
gpt4 key购买 nike

首先,如果发布了类似的内容,我深表歉意。我的正则表达式知识非常有限,我无法找到我可以适应的东西。

提供一个如下所示的 XML 文件:

<?xml version="1.0" encoding="UTF-8"?>
<databaseChangeLog>

<include file="init.changelog.xml"/>
<include file="v9.1.changelog.xml"/>
<include file="v9.2.changelog.xml"/>
<include file="v9.3.changelog.xml"/>
<include file="v9.3.1.changelog.xml"/>
<include file="v9.3.3.changelog.xml"/>

</databaseChangeLog>

我想要一个正则表达式来提取更改日志文件的最后版本。在上面的示例中,这将是字符串 v9.3.3

该正则表达式需要与 java 兼容,因为我需要将它与 ant 一起使用。

提前谢谢您。如果您能够帮助我解释一下它是如何工作的,我将不胜感激。

最佳答案

您可以将文件读取为字符串,然后使用模式和匹配器类,这里是一个示例

    String target = "...<include file=\"init.changelog.xml\"/><include file=\"v9.1.changelog.xml\"/><include file=\"v9.3.3.changelog.xml\"/></databaseChangeLog>...";
Pattern pattern = Pattern.compile("(v)((\\d\\.)+)|init");
Matcher matcher = pattern.matcher(target);
String version = "";
while (matcher.find())
{
version = matcher.group();
System.out.println(version);
}
// use version

表达式 (v)((\\d\\.)+|init) :表示匹配由字母 v 后跟整数 (\\d) 后跟点 (\\.) 组成的字符串,+ 表示一个或多个

'|'是 Or-ing 运算符,因此您也可以匹配“init”

当模式的一部分包含在两个括号中时,意味着它们形成一组,因此最好将模式以组的形式放置,以便在您想使用模式匹配器从匹配的字符串中单独获取一组时变得容易

“matcher”将匹配字符串中与模式匹配的任何部分,matcher.group()从整个字符串中获取该部分的匹配,您也可以使用matcher.group(i)从匹配的字符串中获取一个组

例如,这里 matcher.group(2) 将仅带来不带字母“v”的数字和点,并注意它的索引为 1,其中 0 是目标字符串中的整个匹配部分,它与 matcher.group() 的工作方式相同

关于java - 正则表达式提取两个给定字符串之间最后一次出现的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17626358/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com