2014-07-17 2 views
1

정말 붙어 있습니다. LWP를 사용하고 있습니다. HTML 문서의 특정 링크를 배열로 푸시하고자합니다. 하지만 :Perl LWP 특정 단어가 포함 된 페이지에서 링크를 찾으십시오.

while ($edocument =~ m/href\s*=\s*"([^"\s]+)"/gi) { 
#dostuff 
} 

모든 링크를 처리합니다. URL에 'test'라는 단어가있는 링크 만 있으면됩니다.

저는 모든 종류의 조합을 시도했습니다. 내가 읽고 읽고 난 정말이 당황 상황에 대한 단서를 필요가있다

while ($edocument =~ m/href\s*=\s*"([^"\s*test*]+)"/gi) { 

(너무 많은 시도를 나열합니다).

누군가 도움을 줄 수 있습니까?

또한, $edocument에 대해서도 단어 테스트 중 하나만 일치하면됩니다. 같은 종류의 last 나는 루프에서 추측한다.

@links = $edocument =~ m/<a[^>]+href\s*=\s*["']?([^"'> ]+)/ig;

또한 시도 변형이어서 고유 서브 @ 링크를 통해 실행. 하지만 여전히 '테스트'라는 단어 만 연결하면됩니다. 무엇 다음과 같은 정규 표현식에 대한

+0

나는 이것을 알아 내려고하고있다. 나는 \ s와 *가 무엇인지 알고 있지만, 왜 일치가 일어날까요? href [space] * = [space] * "[space] *와 같은 정규식을 읽습니다.이 정규식에 대한 설명을 어디서나 찾을 수 있도록 노력했기 때문에 직접 확장 할 단서를 가질 수 있습니다. – OldDogLearningNewPerlTricks

+0

시간이 지난 후 시도는 여전히 실패하고 있습니다. 잠시 휴식을 취하십시오. 누군가가 곧 여기에서 소리를 지르며 도움을줍니다. 미리 감사드립니다. – OldDogLearningNewPerlTricks

답변

1

:

while ($edocument =~ m/href\s*=\s*"([^"\s]+test[^"\s]+)"/gi) { #dostuff } 

이 정규 표현식은 그 안에 문자열 테스트와 URL을 일치합니다.

+0

고맙습니다. 노력하고 있습니다. 또한 10 자리 숫자 확인을 원한다면 ?/gi) – OldDogLearningNewPerlTricks

+0

"az"를 제거해야합니다. "m/href \ s * = \ s *"([^ "\ s] + [0-9a- "10 진수 숫자 만 일치시키려는 경우 regexp의 일부입니다. 다음 regexp는 10 개의 숫자가있는 URL 만 선택하는 트릭을 수행해야합니다 : m/href \ s * = \ s *"([^ "\ s ] + \ d {10} [^ "\ s] +)"/ gi) – Trolfes

+0

고맙습니다. – OldDogLearningNewPerlTricks

관련 문제