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