2012-01-08 4 views
0

내 텍스트는 다음과 같습니다 :소문자 바로 대문자 다음 찾기

<font size=+2 color=#F07500><b> [ba]</font></b> 
<ul><li><font color =#0B610B> Word word wordWord word.<br></font></li></ul> 
<ul><li><font color =#F07500> Word word word.<br></font></li></ul> 
<ul><li><font color =#0B610B> Word word word wordWord.<br></font></li></ul> 
<ul><li><font color =#0B610B> WordWord.<br></font></li></ul> 
<br><font color =#E41B17><b>UPPERCASE LETTERS</b></font> 
<ul><li><font color =#0B610B> Word word wordWord word.<br></font><br><font color =#E41B17><b>PhD and dataBase</b></font> </li></ul> 
<font color =#0B610B> Word word word.<br></font></li></ul><dd><font color =#F07500>  »» Word wordWord word.<br></font> 

즉시 <font color =#0B610B>...</font>의 각 대문자 다음에 소문자가있다. 예를 들어 다음과 같이

<font color =#0B610B> Word word wordWord word.<br></font> 

내가 그들을 분할하여이 오류를 해결하려면 (예 : 콜론과 그들 사이에 공백 추가) :

<font color =#0B610B> Word word word: Word word.<br></font> 

지금까지 내가 사용하고을 :

(<font color =#0B610B\b[^>]*>)(.*?</font>) 

<font color =#0B610B>...</font>의 각각의 인스턴스를 선택, 그것은 <font color =#0B610B>...</font>의 인스턴스에 의해 하나 개의 인스턴스를 찾는 잘 작동합니다.

하지만 사용할 때 :

(<font color =#0B610B\b[^>]*>)(.*?[a-z])([A-Z].*?</font>) 

이 찾을 관계없이 다른 폰트 컬러 태그 한 줄에 <font color =#0B610B>...</font> 사이의 모든 것을 선택하고, 기타 원치 않는 인스턴스를 대체 않습니다. 나는 그것을 찾아 태그의 특정 쌍 각각의 오류를 대체 할

이 문제를 해결하기 위해 어떤 정규 표현식 <font color =#0B610B>...</font><font color =#0B610B>로 시작하는 모든 것을 잡아

</font> 끝나지 않는이 있습니까? 미리 감사드립니다.

답변

1

일반적으로 정규 표현식은 HTML을 구문 분석하는 데 적합하지 않습니다 (단 한번만해도 괜찮습니다).

정규식이 작동하지 않는 이유 일 수 있습니다. 정규식이 실패한 경우의 예를 들려 줄 수 있습니까? 나는이있는 경우를 생각할 수

한 경우는 일치 <font color=#0B610B></font> 쌍 내에서 일치 ([a-z][A-Z])은 없지만,이 은 이웃 <font></font>에서입니다. 예를 들면 :

이 경우
<font color=#0B610B>word word</font><font color=#000000>word wordWord</font> 

유효 일치 <font color=#0B610B>word word</font><font color=#000000>word word 및 문자열 Word</font>의 나머지 부분이고, 그래서 이것은 무엇을 정규식 일치입니다

(그것을 일치 할 경우 이후 것입니다!)

나는 비범 한 해결 방법을 생각할 수 있지만, HTML 용 정규 표현식을 사용하면 항상 이러한 오류가 발생하기 때문에이 작업이 일회적이지 않다면 추천하지 않습니다. 이 정규식은 또한 꽤 비효율적입니다. (검증되지 않은) 시도 :

(<font color =#0B610B\b[^>]*>)(([^<]|<(?!/font))*?[a-z])([A-Z].*?</font>) 

그것은 말한다 "고 <font colour=xxxx> 태그를 찾으 각도 /font 다음 브래킷 <하지, 또는 다른 어떤 하나 다음에, 다시 [a-z][A-Z] 뒤에". 그래서 일치가 </font> 경계를 넘지 않도록 시도합니다.

+0

고마워, 수학. 커피.나는 이것이 내가 원하는 것을 찾았지만'\ 1 \ 2 : \ 3 \ 4'로 바뀌면 찾을 수 있기 때문에 도움이 될 것 같아요. 일치는' 단어 : xWord'로 바뀝니다. 나는 왜 ** ** ** 문자가 여기에 추가되는지 모르겠다. (** x **는 어떤 문자도 될 수있다.) –

+0

내부 캐치 브래킷이 추가되어 있기 때문에 '\ 3'에 단일 문자가 포함되어 있습니다. '\ 2'는'\ 3'을 둘러싸고 있으므로'\ 1 \ 2 : \ 4'로 바꾸십시오. –

+0

최고! 너는 내 하루를 구했다. 수학. 커피. 그것은 이제 매력처럼 작동합니다. 정말 고맙습니다. –

관련 문제