정규 표현식에 문제가 있습니다 : <a.*href=[\"'](.*?)[\"'].*>(.*?)</a>
. 여러분은 아마도 알 수 있듯이 HTML 문자열에서 모든 링크를 가져와 그룹 2의 링크 텍스트와 그룹 1의 링크 대상을 반환한다고 가정합니다.하지만 문제가 있습니다. 내가 (모든 플래그에 함께 http://www.regextester.com/ 사용) 자바 스크립트를하려고하면, 그것을 잘 작동하지만, 자바,이 같은 :자바 대 자바 정규 표현식 문제
Pattern myPattern = Pattern.compile("<a.*href=[\"'](.*?)[\"'].*>(.*?)</a>", Pattern.CASE_INSENSITIVE);
Matcher match = myPattern.matcher(htmlData);
while(match.find()) {
String linkText = match.group(2);
String linkTarget = match.group(1);
}
내가 기대하는 모든 일치하지 않습니다. regex 테스터를 사용하면 더 많은 것을 얻을 수 있으며 예상대로 작동하지만 Java 버전에서는 페이지 당 1-2 개의 링크 만 가져옵니다.
죄송 합니다만 이것이 정규식에 익숙하지 않은 경우 죄송합니다.
감사합니다,
이삭 월러
편집 : 나는 내 정규식에 문제가있을 것 같아요. 이 아파치 같이 IndexOf 페이지에서, 참조 :
<tr><td valign="top"><img src="/icons/sound2.gif" alt="[SND]"></td><td><a href="Bryan%20Adams%20-%20Here%20I%20Am.mp3">Bryan Adams - Here I Am.mp3</a></td><td align="right">27-Aug-2008 11:48 </td><td align="right">170K</td></tr>
<tr><td valign="top"><img src="/icons/sound2.gif" alt="[SND]"></td><td><a href="Cars%20-%20Drive.mp3">Cars - Drive.mp3</a></td><td align="right">26-Aug-2008 19:04 </td><td align="right">149K</td></tr>
<tr><td valign="top"><img src="/icons/sound2.gif" alt="[SND]"></td><td><a href="Cock%20Robin%20-%20When%20Your%20Heart%20Is%20Weak.mp3">Cock Robin - When Your Heart Is Weak.mp3</a></td><td align="right">26-Aug-2008 19:04 </td><td align="right">124K</td></tr>
<tr><td valign="top"><img src="/icons/sound2.gif" alt="[SND]"></td><td><a href="Colbie%20Caillat%20-%20Bubbly.mp3">Colbie Caillat - Bubbly.mp3</a></td><td align="right">27-Aug-2008 11:49 </td><td align="right">215K</td></tr>
<tr><td valign="top"><img src="/icons/sound2.gif" alt="[SND]"></td><td><a href="Colbie%20Caillat%20-%20The%20Little%20Things.mp3">Colbie Caillat - The Little Things.mp3</a></td><td align="right">27-Aug-2008 11:49 </td><td align="right">176K</td></tr>
<tr><td valign="top"><img src="/icons/sound2.gif" alt="[SND]"></td><td><a href="Coldplay%20-%20Violet%20Hill.mp3">Coldplay - Violet Hill.mp3</a></td><td align="right">27-Aug-2008 11:49 </td><td align="right">136K</td></tr>
<tr><td valign="top"><img src="/icons/sound2.gif" alt="[SND]"></td><td><a href="Corrs%20-%20Radio.mp3">Corrs - Radio.mp3</a></td><td align="right">26-Aug-2008 19:04 </td><td align="right">112K</td></tr>
<tr><td valign="top"><img src="/icons/sound2.gif" alt="[SND]"></td><td><a href="Corrs%20-%20What%20Can%20I%20Do.mp3">Corrs - What Can I Do.mp3</a></td><td align="right">26-Aug-2008 19:04 </td><td align="right">146K</td></tr>
<tr><td valign="top"><img src="/icons/sound2.gif" alt="[SND]"></td><td><a href="Counting%20Crows%20-%20Big%20Yellow%20Taxi.mp3">Counting Crows - Big Yellow Taxi.mp3</a></td><td align="right">26-Aug-2008 19:04 </td><td align="right">135K</td></tr>
<tr><td valign="top"><img src="/icons/sound2.gif" alt="[SND]"></td><td><a href="Curtis%20Stigers%20-%20I%20Wonder%20Why.mp3">Curtis Stigers - I Wonder Why.mp3</a></td><td align="right">26-Aug-2008 19:03 </td><td align="right">213K</td></tr>
<tr><td valign="top"><img src="/icons/sound2.gif" alt="[SND]"></td><td><a href="Cyndi%20Lauper%20-%20Time%20After%20Time.mp3">Cyndi Lauper - Time After Time.mp3</a></td><td align="right">26-Aug-2008 19:03 </td><td align="right">193K</td></tr>
<tr><td valign="top"><img src="/icons/sound2.gif" alt="[SND]"></td><td><a href="David%20Bowie%20-%20Absolute%20Beginners.mp3">David Bowie - Absolute Beginners.mp3</a></td><td align="right">26-Aug-2008 19:04 </td><td align="right">155K</td></tr>
<tr><td valign="top"><img src="/icons/sound2.gif" alt="[SND]"></td><td><a href="Depeche%20Mode%20-%20Enjoy%20The%20Silence.mp3">Depeche Mode - Enjoy The Silence.mp3</a></td><td align="right">26-Aug-2008 19:03 </td><td align="right">230K</td></tr>
<tr><td valign="top"><img src="/icons/sound2.gif" alt="[SND]"></td><td><a href="Dido%20-%20White%20Flag.mp3">Dido - White Flag.mp3</a></td><td align="right">27-Aug-2008 11:48 </td><td align="right">158K</td></tr>
내가 가야 :
1 : 브라이언 % 20Adams % 20 % 20Here % 20I % 20Am.mp3
2 : 브라이언 아담스 - 여기에 내가 Am.mp3
등이 더 있습니다. Regex 테스터를 사용하면 원하는 모든 결과를 얻을 수 있습니다. Java에서는 아무 것도 얻지 못합니다.
이것은 Java vs. JavaScript 문제가 아니며 테스터의 결함입니다. 단선 모드 (Java에서 DOTALL 모드)를 지정할 수 없습니다. 그래서 정규 표현식이 "작동"하는 이유입니다. 모든 일치 항목은 텍스트의 개행 문자로 둘러싸여 있으므로 둘 이상의 링크와 일치 할 수 없습니다. –
감사합니다. Alex, 어떻게 해결하겠습니까? –