2008-11-06 2 views
3

임에만 <link> 태그가 왜이 <하는 HREF를 포함한 모든하는 HREF를 반환 정규식 않습니다 'link'태그의 'href'속성 만 반환하는 RegEx?

을하는 HREF 반환 정규식 공예하려고?
 
    <link rel="stylesheet" rev="stylesheet" 
    href="idlecore-tidied.css?T_2_5_0_228" media="screen"> 
    <a href="anotherurl">Slash Boxes</a> 

 
    (?<=<link\s+.*?)href\s*=\s*[\'\"][^\'\"]+ 

내가 백 참조 자신에 약간 흔들리는 해요

+0

질문을 수정하십시오. 나는 그 누구도 당신의 질문을 이해할 것이라고 생각하지 않습니다. – Rexxars

답변

3

어느

/(?<=<link\b[^<>]*?)\bhref=\s*=\s*(?:"[^"]*"|'[^']'|\S+)/ 

또는

/<link\b[^<>]*?\b(href=\s*=\s*(?:"[^"]*"|'[^']'|\S+))/ 

의 주요 차이점은 [^<>]*? 대신 .*?입니다 . 다른 태그로 검색을 계속하기를 원하지 않기 때문입니다.

+0

우수! 나는 결코 그것을 골라 내지 않았을 것이다! –

0
/(?<=<link\s+.*?)href\s*=\s*[\'\"][^\'\"]+[^>]*>/ 

감사합니다, 그래서 나는 거기에 있음을 떠났다. 이 정규식 생각 :

/(<link\s+.*?)href\s*=\s*[\'\"][^\'\"]+[^>]*>/ 

... 내 자바 스크립트 테스트에서 작동합니다.

+1

이것이 작동하지 않는 것 같습니다 –

0

어떤 정규식 기호를 사용하고 있습니까? Perl은 가변 길이 lookbehind를 지원하지 않습니다. 그 옵션이 어디, 나는 (MizardX에서 아주 좋은 아이디어를 구현하기 위해 편집)을 선택 것 제 1 근사치로

(?<=<link\b[^<>]*?)href\s*=\s*(['"])(?:(?!\1).)+\1 

합니다. 따옴표의 선택 ('또는 ") 일치하게 될 그런 식으로 (가변 길이)에 대한 지원이없는 언어 같은 lookbehind :.

(?:<link\b[^<>]*?)(href\s*=\s*(['"])(?:(?!\2).)+\2) 

\ 1이 경기를 포함

0
(?<=<link\s+.*?)href\s*=\s*[\'\"][^\'\"]+ 
. .

(?<=<link\s+.*?)href\s*=\s*([\'\"])[^\'\"]+(\1) 
: Expresso (나는 프레소는 .NET 정규식 엔진에서 실행되는 생각)와

작품 당신은 폐쇄 ' 또는 "에 맞게이 좀 더 세분화 할 수

어쩌면 정규식 엔진이 lookbehind 어설 션과 함께 작동하지 않을 수도 있습니다. 해결 방법은 될 것

(?:<link\s+.*?)(href\s*=\s*([\'\"])[^\'\"]+(\2)) 

귀하의 일치는 캡처 그룹에있을 것입니다 1.

1

간단한 사례에 대한 시선을 피하고 필요한 것을 맞추고 원하는 것을 캡처하십시오.

정규식 코치에서 s 및 g 옵션을 사용하면 <link\s+[^>]*(href\s*=\s*(['"]).*?\2)으로 좋은 결과를 얻었습니다.