2010-07-28 5 views
1

난이 정규식있어 확인 : 이제정규식 시행 일치

^[\w\s]+=["']\w+['"] 

정규식이 일치합니다 :

A HREF = '구글에서'

A HREF는 = "구글을"

및 also

a href = 'google'

어떻게 정규식을 인용 부호와 일치시킬 수 있습니까? 첫번째 견적 따옴표 인 경우
, 나는 또한 지난 인용 따옴표없는 따옴표

답변

6

에 대한 backreferences을 읽어보십시오. 두 번째 +?을 데려 가고 싶다는 그렇지 않으면이 욕심 것이다

^[\w\s]+=(["'])\w+?\1 

참고. 그러나 일반적으로 HTML을 구문 분석하는 올바른 방법은 아닙니다. Beautiful Soup을 사용하십시오.

+0

나는 \ 1이 자바 스크립트에서는 사용되지만 다른 언어에서는 그렇지 않다는 것을 보았다. 다른 언어에서 사용할 수 있습니까? – slier

+0

예. 그것은 정규 표현식의 일부입니다. – katrielalex

+0

예, PHP에서는 작동합니다. – Wrikken

0

할 수있는 방법이 시도 :

^[\w\s]+="\w+"|^[\w\s]+='\w+' 
0

난 당신이 그것에게 먼 길을해야 할 것 두려워 : 인용 부호의 정확한 일치/중첩을 보장, 더 기술적으로

^[\w\s]+=("\w+"|'\w+') 

당신이 가진 것보다 복잡한 문제 때문에 정규 문법에 대한 문제가되지 않습니다 적절한 파서 (또는 perl6 스타일의 확장 정규 표현식을 사용하지만 기술적으로 정규 표현식으로 클래스를 사용하지 않음).

+0

사실, 첫 번째 인용문을 캡처 한 다음 역 참조 할 수 있습니다. – katrielalex

+0

그래도 그렇게하면 일반 표현식이 기술적으로 정규 표현식이 아니므로 내 성명을 유지할 수 있습니다 (완벽하게 좋은 방법이지만). – ternaryOperator

0

가 역 참조 (캡처 그룹)를 사용하는 \1['"]를 교체

^[\w\s]+=["']\w+\1

0

무엇 정확하게 일치시킬 수 있습니까?그것은 당신이 일치 할 소리 :

  • 단어 (태그 이름)
  • 필수 공백을
  • 단어 (ATTR 이름)
  • 옵션 공백
  • =
  • 옵션 공백
  • 를 하나를 인용 또는 큰 따옴표로 묶인 값 (attr 값)

을 될 것이라고 : ^(\w+)\s+(\w+)\s*=\s*(?:'([^']*)'|"([^"]*)")

이 같은 경기 수 :

  • a href='' - 따옴표 - 인용 부분
  • a href="one 'n two"에 공백 및 기타 비 단어 문자 - 빈
  • a href='Hello world'
  • ATTR을 인용 부분에 다른 종류가 있음
  • a href = 'google' - 양쪽 공백은 =
  • 원래 정규 표현식이 허용하는 이와 같은

그리고 허용 일 :

  • a b c href='google' - 추가 단어
  • ='google' - 왼쪽
  • href='google'에 공백 만 - 만 왼쪽
에 ATTR

여전히 정확하게 발음하지 않습니다. 하나의 속성과 정확히 일치하는 태그를 찾으려고합니까? 이 정규 표현식으로

는 태그 이름은 ATTR $2에 이름을 지정하고 하나 $3 또는 $4에서 ATTR 값 (다른 것을 전무, $1에있을 것입니다 - 대부분의 언어가 전무로 촬영되지 그룹을 구별 그룹 "" 경우로 촬영하지만, 빈 대 당신은 그것을 필요로한다). 당신은 이중 인용 ATTR 값과 그 구절에 작은 따옴표를 허용하기를 원한다면 ATTR 값이 같은 그룹에 얻을 수 있도록 할

정규 표현식 메시 될 것이다 - 무언가를 ^(\w+)\s+(\w+)\s*=\s*(['"])((?:(?!\3).)*)\3 ((?!) 제로 폭 부정적인 예견처럼 - (?:(?!\3).) 수단을 후자를 제외하고는 [^\3]과 같은 것)은 지원되지 않습니다.

^(\w+)\s+(\w+)\s*=\s*(['"])(['"]*)\3이 괜찮 으면 ($3은 모두 견적 유형이며, $4 attr 값임).

덧붙여서 (["'])\w+?\1 위 - \w는 따옴표와 일치하지 않으므로이 ?은 변경되지 않습니다.

모든 즉,이 regexps '에 펄 및 루비에서 작동하는 실제 HTML 파서를 ;-)

사용 가졌어요.다른 언어들은 일반적으로 Perl의 정규 표현식 시스템을 복사하지만 약간의 변경을 도입하기도하므로 약간의 조정이 필요할 수 있습니다. 특히 부정적인 look-ahead가있는 것이 지원되지 않을 수 있습니다.