최신 업데이트 : 이것은 표현 자체가 아니라 정규 표현식에 문제가있는 것 같습니다. 필자는 그것을 조금 더 테스트하고 입력 문자열에 Pattern/Matcher를 사용하면 문제가 발생합니다. 메타 문자가있는 입력 문자열은 정규 표현식을 통해 건너 뛸 수 있습니다. 방금 사용한 .replaceAll을 같은 표현식으로 사용하면 괜찮습니다. Pattern.quote를 입력 문자열에 사용하려고했지만 아무 것도 변경하지 않았습니다. 그래서 나는 아직도 붙어있다. 입력 문자열에 메타 문자가있는 경우 정규식이 일치하지 않는 이유는 무엇입니까? 그리고 거기에 matcher에 관해서 입력 문자열이 메타 문자를 무시하도록 만드는 방법이 있습니까? (점)은 문자열에서 괄호를 찾지 못합니까?
나는 닫는 태그의 태그의 시작에서 모든 HTML 링크를 꺼내 큰 문자열에 정규식을하려고하고있다. 나는이 표현을 생각해 냈다 :
<a.*?</a>
어느 것이 꽤 잘하는가? 거의 모든 것을 얻을 수 있습니다. 내 문제는 문자열 안에 괄호가있는 경우입니다.
<a href="blahblah">myproblem()</a>
정규식은이 링크를 완전히 건너 뜁니다. 나는. *이라고 생각했다. 처음 a 뒤에 오는 공간부터 닫는 태그의 열린 대괄호까지 모든 것을 가져 오지만 괄호가있는 경우에는 그렇지 않습니다.
무엇이 여기에 있습니까?
설명을위한 EDIT :
자바를 사용하고 있습니다. 여기에 내 프로젝트에 추가하기 전에 이것을 테스트하기 위해 내가하고있는 일이있다. 내가 이걸 실행할 때 실패하지만, 시험에서()을 꺼내면 통과한다. 와() 나는 그것이 심지어 목록에 추가하지 않을 확신 해요 :
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);
}
는이'?'정확히 무엇을 생각됩니다 실현하지 나로부터 오해의 소지가 된 것 같아요?아,이 표현식은 태그 이름이 "a"로 시작하는 요소 (예 : , , )를 선택합니다. 또한 [this] (http://stackoverflow.com/a/1732454/1016716). –
정규식을 처음 사용하니? 이전 식의 0 또는 1로 설명되었습니다. 나는 그것을 보았 기 때문에 그냥 놓았습니다. *? 일종의 '모두 잡아'. 나는 다른 태그들에 대해 정말로 생각하지 않았습니다. 감사합니다. 그러나 지금은()가 왜 엉망이되는지 이해하려고 노력하고 있습니다. – Pewsplosions