Java 正则表达式。(点)不捕捉字符串中的括号?

Java 正则表达式。(点)不捕捉字符串中的括号?,java,html,regex,hyperlink,anchor,Java,Html,Regex,Hyperlink,Anchor,最新更新:这似乎是匹配器的问题,而不是表达式本身的问题。我对它进行了更多的测试,在输入字符串上使用Pattern/Matcher导致了这个问题。具有元字符的输入字符串会导致匹配器跳过匹配。如果我只使用一个简单的.replaceAll,它会发现它很好。我尝试在输入字符串上使用Pattern.quote,但没有更改任何内容。所以我还是被卡住了。如果输入字符串中存在元字符,为什么匹配器找不到匹配?有没有办法让输入字符串忽略匹配器的元字符 我正在尝试对一个大字符串执行正则表达式,以从标记的开始到结束标

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


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

<a.*?</a>

匹配器完全跳过此链接。我还以为那是什么?将拾取从第一个a后面的空格到结束标记的开括号中的所有内容,但如果有括号,则不会拾取

我错过了什么

编辑以澄清:

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

String tryConvert = doclet.htmlToWiki("<a href=\"#test.method\">test()</a>");
assertThat(tryConvert, is("[test()|test#method]"));
String tryConvert=doclet.htmlToWiki(“”);
资产(tryConvert,即“[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);
    }
arraylistlinks=newarraylist();

Pattern linkPattern=Pattern.compile(“”)如果看不到您正在使用的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输入='foo-bar';
var match=input.match(/
或者:

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

经过大量测试,我发现我的模式和匹配器毕竟不是问题所在。我的代码的问题是,在最后一个replaceAll方法中,原始的是另一个正则表达式模式,而不是文本。因此,它是在查找元字符,而不是执行我预期的操作

如果在进行最终替换时尝试类似的操作,请使用Pattern.quote()环绕原始变量

这将使它从本质上把原文当作它的字面形式


谢谢大家的帮助,我想我的问题是误导了我,因为我没有意识到这么小的事情(不是一直都是这样吗!?)

这个
到底应该做什么?哦,这个表达式还提取了标记名以“a”开头的元素“,例如,
。我对regex不熟悉,”,被解释为前面表达式的0或1,我只是把它放在那里,因为我已经看到了。*?作为一种“包罗万象”。我真的没有想到其他标记,所以谢谢,但现在我只是想理解为什么()把事情搞砸了。谢谢你的快速回答。我会在原始帖子中添加更多细节,也许会有助于澄清一些事情。我删除了<和>的转义字符,所有内容仍然以相同的方式工作(…不确定为什么我认为他们需要它们。)所以我的表达式应该可以工作……我真的不知道为什么它不能工作。它也可以工作。@user2395495你确定它不匹配吗?错误可能在
htmlToWiki
中的其他地方吗?是的,我将它缩减到该部分并重试。当锚标记之间的字符串有()时,它甚至不会添加到列表中。
var input = 'foo <a href="blahblah">myproblem()</a> bar';
var match = RegExp('<a.*?</a>').exec(input);
alert(match[0]); // <a href="blahblah">myproblem()</a>
Pattern.quote(original)