gpt4 book ai didi

java - 如何在java中正确转义这个正则表达式模式?

转载 作者:行者123 更新时间:2023-12-02 05:39:38 26 4
gpt4 key购买 nike

这是我要处理的输入。我想提取 operation 属性的值:

<h:outputLink value="#" id="temp_solution">
<rich:componentContro
for="panel"
attachTo="temp_solution"
operation="show"
event="onclick"/>
</h:outputLink>

online regex tester的帮助下我想出了以下正则表达式

(?<=operation=")(\w+)(?=")

为了更加动态,我将 operation 替换为 %s,这样我就可以在不同情况下使用此模板。但我在尝试借助一个小测试程序来测试我的“创作”时遇到了一个问题:

public class Main {
private static final String INPUT = "<h:outputLink value=\"#\" id=\"temp_solution\">\n"
+ " <rich:componentControl \n"
+ " for=\"panel\" \n"
+ " attachTo=\"temp_solution\" \n"
+ " operation=\"show\""
+ " event=\"onclick\"/> \n"
+ "</h:outputLink>";

private static final String REGEX_TEMPLATE = "(?<=%s=\")(\\w+)(?=\")";

public static void main(String[] args) throws IOException {
final String actualRegex = String.format(REGEX_TEMPLATE, "operation");
final Pattern pattern = Pattern.compile(actualRegex);
final Matcher matcher = pattern.matcher(INPUT);

System.out.println("Regex: " + pattern);
System.out.println(matcher.matches() ? matcher.group(0) : "Nothing found");
}
}

输出:

Regex: (?<=operation=")(\w+)(?=")
Nothing found



甚至在我的代码中双重转义正则表达式:

private static final String REGEX_TEMPLATE = "(?<=%s=\\\")(\\\\w+)(?=\\\")";

没有帮助:

Regex: (?<=operation=\")(\\w+)(?=\")
Nothing found

请给我一些建议。

最佳答案

你的正则表达式没有任何问题。但是,它与整个输入不匹配,因此您不能使用 matches() 。将其更改为find() ,它只尝试找到匹配的子序列:

System.out.println(matcher.find() ? matcher.group(0) : "Nothing found");

关于java - 如何在java中正确转义这个正则表达式模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25786009/

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