2011-01-09 3 views
0

나는 내 자신의 phpBB3에 대한 작업을하고 있습니다. 나는 그 미소를 oringinal 스마일 상태로 다시 변환하려고합니다.BBCode에 이미지 Regex'ing의 문제

$1 

그러나 나는 여러 스마일있을 때, 그냥 마지막 웃는을 보여, 예를 들면 :

/<img src=".*" alt="(.*)" title=".*">/gi 

로 대체 : 웃는의 HTML이 포함 된 이후

:) :( :O :P 

이 같이 있다면 :

alt text http://uimgz.com/i/R2e3H8g5D8.png

그것은이로 바뀝니다 :

오른쪽에 마지막 웃는입니다
:twisted: 

, 왜 안있다가 웃는 모든 상태를 대체 반환하는

:) :o :twisted: 

정규식은 잘 보이지만, 나는 정규식의 모든를 사용하여 교체 루프를 통해 이동 문제가 될 것 같습니다하지 무엇 : 그것은 다음과 같이 반환해야루프가 문제가되지 않습니다.

여러 스마일 HTML :

<img src="./images/smilies/icon_e_smile.gif" alt=":)" title="Smile" /> <img src="./images/smilies/icon_e_surprised.gif" alt=":o" title="Surprised" /> <img src="./images/smilies/icon_twisted.gif" alt=":twisted:" title="Twisted Evil" /> 
+0

여러 스마일이있는 경우 어떻게 html이 생깁니 까? –

+0

게시물을 업데이트했습니다. – MacMac

답변

1

변경이 다시 시도에 대한 정규식 :

/<img src="[^"]*" alt="([^"]+)" title="[^"]*">/gi 

정규식 엔진은 일반적으로 욕심이다. 가장 긴 텍스트와 일치하는 텍스트를 찾습니다. 귀하의 경우에는 그것은 하나의 세 링크를 모두 일치. 어떻게 내가 여기 한 것은 세 번째 SRC 모든 방법과 일치하지 않도록 "를 포함하지 않도록 src 속성 안에있는 내용을 제한하는 것이었다. 그것은 src 속성으로이 치료 비에 대한 ./images/smilies/icon_e_smile.gif" alt=":)" title="Smile" /> <img src="./images/smilies/icon_e_surprised.gif" alt=":o" title="Surprised" /> <img src="./images/smilies/icon_twisted.gif

+0

신난다, 그것은 아주 굉장하다. – MacMac

+0

당신은 환영합니다 :). @ Marcog의 솔루션도 효과가 있습니다. –

1

사용 *?+? 욕심이 일치 :

/<img src=".*?" alt="(.+?)" title=".*?">/gi 

무엇 당신의 실패 예에서 일어나고있는 것은 첫째 .*이 모두 일치된다는 점이다 :

./images/smilies/icon_e_smile.gif" alt=":)" title="Smile" /> <img src="./images/smilies/icon_e_surprised.gif" alt=":o" title="Surprised" /> <img src="./images/smilies/icon_twisted.gif 

은 아직이다 유효한 일치를 생성하지만, 원하는 것은 아닙니다. ? 이후에 */+ 정규 표현식은 일치하는 데 필요한 가장 작은 문자열을 소비합니다. "Greediness 조심해!"섹션을 읽으십시오. this article.

일반 구문이 HTML 구문 분석에 가장 적합한 도구는 아니라는 일반적인 경고를 추가하고 싶습니다. src 속성이 이스케이프 처리 된 경우 (예 : ") 정규 표현식도 손상됩니다.