gpt4 book ai didi

java - 正则表达式。 (点)没有捕获字符串中的括号?

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

最新更新:这似乎是匹配器的问题,而不是表达式本身的问题。我对其进行了更多测试,并在输入字符串上使用模式/匹配器导致了问题。具有元字符的输入字符串会导致匹配器跳过匹配。如果我只是使用一个简单的 .replaceAll 和相同的表达式,它会发现它很好。我尝试在输入字符串上使用 Pattern.quote 但没有改变任何内容。所以我还是被困住了。如果输入字符串中存在元字符,为什么匹配器找不到匹配项?有没有办法让输入字符串忽略匹配器的元字符?

<小时/>

我正在尝试对一个大字符串执行正则表达式,以提取从标签开头到结束标签的所有 html 链接。我想出了这个表达:

<a.*?</a>

这做得非常好。它几乎得到了所有这些。我的问题是字符串内是否有括号,例如:

<a href="blahblah">myproblem()</a>

匹配器完全跳过此链接。我以为.*?会拾取从第一个 a 之后的空格到结束 a 标签的左括号的所有内容,但如果有任何括号则不会。

我在这里缺少什么?

编辑澄清:

我正在使用java。这是我在添加到我的项目之前所做的测试。当我运行它时,它失败了,但是如果我在测试中取出 () ,它就会通过。使用 () 我很确定它甚至没有被添加到列表中:

String tryConvert = doclet.htmlToWiki("<a href=\"#test.method\">test()</a>");
assertThat(tryConvert, is("[test()|test#method]"));

以及 htmlToWiki 代码:

ArrayList<String> links = new ArrayList<String>();
Pattern linkPattern = Pattern.compile("<a.*?</a>", Pattern.DOTALL);
Matcher matcher = linkPattern.matcher(html);
while (matcher.find())
{
links.add(matcher.group());
}

for (String link : links)
{
String original = link;
String alias = link.replaceAll("<a.*?>", "");
alias = alias.replaceAll("</a>", "");
link = link.replaceAll("\">.*?</a>", "]");
link = link.replaceAll("<a.*#", "[");
link = link.replaceAll("\\.", "#");
link = link.replace("[", "[" + alias + "|");
html = html.replaceAll(original, link);
}

最佳答案

如果没有看到您正在使用的 JavaScript,就很难准确判断出了什么问题。也许有太多转义字符(无论如何这里确实不需要)。这对我有用:

var input = 'foo <a href="blahblah">myproblem()</a> bar';
var match = input.match(/<a.*?<\/a>/);
alert(match[0]); // <a href="blahblah">myproblem()</a>

或者:

var input = 'foo <a href="blahblah">myproblem()</a> bar';
var match = RegExp('<a.*?</a>').exec(input);
alert(match[0]); // <a href="blahblah">myproblem()</a>

关于java - 正则表达式。 (点)没有捕获字符串中的括号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17620171/

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