2013-06-15 2 views
1

그래서 나는 단순히 나를 위해 작동하지 않는 정규 표현식을 찾으려고합니다. 나는 그 (것)들을 쓰는 것을 아주 잘, 결코 보지 않으며 누군가가 나가 여기에서 틀리게하고있는 무엇을 설명 할 수 있었다는 것을 희망하고 있었다. Java로 HREF에서 앵커 텍스트를 가져 오려고합니다. 텍스트를 얻으려는 페이지를 다운로드하고 있습니다.하지만 어떤 이유로 그것이 필요한 것들을 제거하지 않습니다. 모든 페이지에서 클래스와 제목은 변경되지 않습니다. 사실, 나는 그 클래스와 제목이있는 것들만 원합니다.URL 앵커 텍스트 정규식 풀러

s = <span class="alwaysTheSameClass"><a title="alwaysTheSameTitle" href="differentEveryTime">TextImTryingToPull</span><br> 
s = s.replace(,""<span class=\"alwaysTheSameClass\"><a title=\"alwaysTheSameTitle\" href=\".*\">"") 

이렇게 할 때마다 동일하게 인쇄됩니다. 나는 s.contains을했지만 거짓이 떠오른다. 내가 말했듯이, 나는 정규 표현식에 끔찍하다. 나는이 표현식이 사용하기에 충분히 단순 할 것이라고 생각했지만 분명히 틀렸다. 내 문제는 어 딨지?

고마워요!

+0

'java'! ='javascript', 또한'나는 단지 * 잘 작동하지 않는 정규 표현식을 찾으려고합니다. '... 확실합니까? – Pshemo

+0

글쎄, 나는 자바를 사용하고 있다고 말했다. 나는 이클립스에서 작동하도록 할 수 없다. 어떤 생각이 도움이 될 것입니다. :) – Rob

답변

1

먼저 귀하의 예제에서 가까운 앵커 태그 </a> 누락, 몇 가지 문제가있다. 정규 표현식에서 / 문자를 이스케이프 처리해야 \/처럼 보일 것입니다. 귀하의 string.replace 문은 실종처럼 보이는 것 -에 - 검색에 대한 부분 title 속성이 alwaysTheSameTitle 곳이 정규식은 모든 앵커 태그를 찾을 수

see java manual

설명. 표현식은 속성의 값을 작은 따옴표 나 큰 따옴표로 묶어야합니다. 이것이 발견되면 표현식은 href 속성 값과 열려있는 앵커 텍스트와 닫은 앵커 텍스트 사이의 문자열을 캡처합니다. 이 표현식은 href 및 title 속성이 임의의 순서로 앵커 태그에 표시되도록합니다.

<a\b(?=\s)(?=[^>]*\s\btitle=(["'])alwaysTheSameTitle\1)(?=[^>]*\s\bhref=(["'])((?:(?!\2)|.)*)\2)[^>]*>(.*?)<\/a>

enter image description here

그룹

그룹 0 태그를 닫 열린 태그에서 전체 앵커 태그를해야합니다

  1. 단일 또는 이중 하나 오픈 인용 유형이있을 것이다, 이 문자는 \1에서 사용되어 올바른 문자가 올바른지 확인하기 위해 title 속성 값
  2. 오픈 인용 유형이있을 것이다 단일 또는 이중 하나, 이것은 올바른 닫는 문자를 가지고있는 href 속성 값을 arond 유효성을 검사하는 \2에서 사용되는
  3. 따옴표를 포함하지 않는 href 속성 값 문자열을해야합니다
  4. 는 앵커 태그 내부에 랩 문자열을해야합니다

매치 예를

을 감안할 때 입력 텍스트 <span class="alwaysTheSameClass"><a title="alwaysTheSameTitle" href="differentEveryTime">TextImTryingToPull</a></span><br>

내부 텍스트는 정말 엔진을 구문 분석 HTML을 사용하여 뽑아해야

0

일치

[0] => <a title="alwaysTheSameTitle" href="differentEveryTime">TextImTryingToPull</a> 
[1] => " 
[2] => " 
[3] => differentEveryTime 
[4] => TextImTryingToPull 

부인, 이것은 정규식 구문 분석 HTML 텍스트가 실패 문제 가장자리 사례를 방지 할 수 있습니다. 그러나 당신이 HTML을 통제하고 있고 희미한, 드문 또는 불법 HTML로 구성된 드문 경우의 위험을 기꺼이 받아들이면이 표현이 예상대로 작동하지 않을 것입니다. 정규 표현식은 당신

0

DOM에서 답을 얻는 것이 훨씬 쉽습니다. 예를 들어 :

var links = document.getElementsByTagName("a") 
for (foo in links){ 
if(links[foo].title = "always the same"){ 
var bar = links[foo].href; //this should get your href 
alert(bar); 
} 
} 

건배, LC