2013-03-15 3 views
0

정규 표현식을 사용하여 패턴을 일치시키고 싶지만 일치하는 예외가 필요합니다. 예를 들어 'John Doe'가 굵은 태그로 묶인 경우 ('<b> John Doe </b>')를 제외하고 'John Doe'의 모든 일치 항목을 일치시킵니다.예외가있는 패턴 일치

Match: John Doe 
Don't match: <b>John Doe</b> 

어떻게 이것을 정규식으로 수행 할 수 있습니까?

설명 : 굵게 태그 사이에 모두을 제외하고 싶습니다. 이 제외 된 콘텐츠에는 다양한 문자, 줄 바꿈 등이 포함될 수 있습니다.

+2

정규식은 무엇입니까? 부정적인 lookbehind 같은 것을 모든 맛에서 사용할 수 없으므로 중요합니다. –

+1

' John Doe'은 굵게 표시되어 있습니다. 제외 시키시겠습니까? – nhahtdh

+0

PHP'preg_replace' 함수입니다. 필자는 예제에서 두 개의 굵은 태그 사이의 모든 것을 제외하려고합니다. 굵은 글씨의 내용은 다양한 정렬을 가지며 다른 언어의 코드를 포함합니다. 여기에 제시된 몇 가지 제안을 시도해 보겠습니다. 감사! –

답변

0

이 마이너스보기 차선책을 사용할 수

(?<!<b>)John Doe(?!</b>) 

<b>John Doe 또는 John Doe</b> 하나 생각과 일치하지 않을 것이라고.

만 개폐 당신은 같은 것을 할 수있는 태그를 모두 인스턴스를 일치하지하려면

: - :

John Doe(?!(?<=<b>John Doe)</b>) 

또는 약간 짧은 (미만 이해할 8 John Doe의 길이)

John Doe(?!(?<=<b>.{8})</b>) 
+0

고마워요! 그게 내가 원하는 거의거야. 그러나 'John Doe'는 줄 바꿈 문자와 다른 문자를 앞뒤로 사용할 수 있어야합니다. 나는 대담한 태그들 사이의 어딘가에, 패턴에 의해 매치되어서는 안되는'John Doe'의 존재가 있다는 것을 알고 있습니다. –

+0

굵은 태그를 묶은 굵은 태그가있는 인스턴스가 있습니까? 그들 중 하나 또는 둘 다. 아니면 굵은 태그 안에''또는 ''을 찾을 수 없다는 것을 알고 계십니까? 또한 : "묶는"굵은 태그는 전체 문자열에서 ** 오직 ** 굵은 태그입니까? – rvalvik

+0

굵게 태그 안에 절대 굵은 태그를 사용하지 않을 것임을 알고 있습니다. 그리고 아니요, 전체 문자열에는 여러 쌍의 굵은 태그가 있습니다. –

1

당신의 정규식 방언 lookarounds하면 해당 작업에 달성하기 위해 부정적인 lookbehind과 부정적 예측을 사용할 수 있습니다 경우 : 인쇄 위 (

$ echo "<b>John Doe</b>" | perl -ne 'print if /(?<!<b>)John Doe/' 

: 당신이 부정적인 lookbehind을 사용할 수 있습니다

(?<!<b>)John Doe(?!<b>) 
+0

감사! 나는 이것을 투표 할 것이지만 좀 더 정교하기 때문에 또 다른 답을 옳은 것으로 표시 할 것이다. –

0

펄을 사용하여 아무것도 - 일치하지 않음).

$ echo "John Doe" | perl -ne 'print if /(?<!<b>)John Doe/' 
John Doe 

(이상).

Symbol (?<!<b>)은 음수의 lookbehind 문자열입니다.이 문자열은 그 안에 들어 있지 않으면 일치합니다 (이 경우 <b>).