gpt4 book ai didi

java - 使用多个模式时,如何在 match.find() 之后查找当前用于模式匹配的正则表达式?

转载 作者:行者123 更新时间:2023-12-02 02:19:56 25 4
gpt4 key购买 nike

我正在使用下面的正则表达式来替换匹配的内容。
我的问题是,有什么方法可以找到当前匹配器正在使用的模式(我的意思是 matcher.find() 对于给定的模式)?

String[] searchRegex = new String[]{"(?i)<my:link([^>]+)/>", "(?i)<my:anotherLink([^>]+)/>", "\\$var([^>]+)\\$"};
StringBuffer buffer = new StringBuffer();
Pattern pattern = Pattern.compile(Stream.of(searchRegex).collect(joining("|")));
Matcher matcher = pattern.matcher(jsonObject.toString());
while (matcher.find()) {
//how to find which pattern is used here to match content?
String match = matcher.group();
System.out.println(match);
//here, need to use different replace content for each pattern
matcher.appendReplacement(buffer, Matcher.quoteReplacement("<a href=\"wwww.google.com\">link to google</a>"));
}
matcher.appendTail(buffer);

最佳答案

您的最终正则表达式将如下所示

(?i)<my:link([^>]+)/>|(?i)<my:anotherLink([^>]+)/>
^^^^^^^ ^^^^^^^
group 1 group 2

在当前表单中,您可以仅测试 group(1) 的结果是否包含某些文本或者是否为空。只能匹配 regex1|regex2 之一,因此这些组中只有一个包含文本,其他组将包含 null。因此,如果 matcher.group(1) 将包含与 null 不同的任何内容,那么您的第一个正则表达式会被匹配,否则第二个正则表达式会被匹配。

简化的演示:

Pattern p = Pattern.compile("a(b)|a(c)");
Matcher m = p.matcher("abac");
while (m.find()) {
if (m.group(1) != null) {
System.out.println(m.group() + " was matched by first pattern ");
} else {
System.out.println(m.group() + " was matched by second pattern ");
}
}

输出:

ab was matched by first pattern 
ac was matched by second pattern

关于java - 使用多个模式时,如何在 match.find() 之后查找当前用于模式匹配的正则表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48654478/

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