2013-01-01 2 views
2

[tag]blabla[/tag]정규 표현식 : 특정 문구

을 제외하고 나는 그것을 대체하고 싶습니다 :

<tag>blabla</tag>

그러나이 변경 [tag][/tag] 사이 문구 "leavemealone"이 경우 둡니다.

so [tag]leavemealone[/tag] 또는 [tag]aaa leavemealone[/tag] 또는 [tag]aaa leavemealone aaa[/tag] 등은 변경되지 않아야합니다.

코드 :

preg_replace("#\[tag\](what_should_be_here)\[\/tag\]#", "<tag>$1</tag>", $text); 
+1

@WaleedKhan이 정말 도움이된다? 아마도 그의 질문에 대답하면 결국 더 많은 도움이 될 것입니다 (우리는 그의 제약 조건을 알지 못합니다^_ ^). –

+1

"regexes로 마크 업을 구문 분석하지 마십시오." - 좋은 의견, 이제는 모든 것이 명확 해집니다. (...) – geehertush01

+1

@ geehertush01 : 그래도 좋습니다. 정규식으로 마크 업을 올바르게 파싱하는 것은 정말 빠릅니다. –

답변

4

는 다음과 같은 패턴을 사용합니다.

$match = "#\[(\w+)\](?!.*leavemealone.*)(.*?)\[/(\w+)\]#"; 
$replace = "<$1>$2</$3>"; 

그리고 그렇게해야합니다. 당신이 어떤 태그하지만, 단지 "tag"태그를 일치하지 않을 경우,이 같은 그것을 해결할 수 :

$match = "#\[tag\](?!.*leavemealone.*)(.*?)\[/tag\]#"; 
$replace = "<tag>$1</tag>"; 
+0

바꾸기 값을 확인 하시겠습니까? – fge

+0

@fge 아니요, 표현식을 바꾸면 구분 기호를 사용하지 않는다는 인상을 받고 있습니다. – jeremy

+0

바꾸기 값에 정규식 구분 기호를 포함 시켰습니다. 또한 생각합니다. *는 선구자 표기법에서 다소 혼란 스럽습니다. 그 외의 방법은 가야합니다. – caiosm1005