2012-05-11 4 views
0
$pattern = "/\[url\=(.*)\](.*)\[\/url\]/i"; 

내 패턴은 bbcode를 html로 다시 작성하지만 내 도메인에서 링크를 제외하고 싶습니다. 정규식을 수정하여 내 외부 도메인의 링크가 아닌 모든 외부 링크에서 작동하도록 할 수 있습니까?예외가있는 코드 bbcode

/\[url\=((?:(?!example\.com).)*)\](.*)\[\/url\]/i 

답변

0

당신은 당신이 일반적으로 preg_replace_callback 기능을 사용하는 것이 그런 짓을 할 때마다 : 도메인을 가정

0

example.com이며,이 패턴은 작업을 수행합니다.

대체 문자열을 제공하기 전에 추가 조건을 확인할 수있는 콜백 함수를 지정할 수 있습니다. 콜백 함수를 사용하면 "대체"할 수 있으므로 대체가 수행되지 않습니다.

$pattern = "/\[url\=(.*)\](.*)\[\/url\]/i"; 
$callback = function($matches) 
{ 
    $url = $matches[1]; 
    if (is_own_domain_url($url)) { 
     return $matches[0]; # no changes 
    } else { 
     $title = $matches[2]; 
     return sprintf('<a href="%s">%s</a>' 
       , htmlspecialchars($url) 
       , htmlspecialchars($title) 
     ); 
    } 
} 

$html = preg_replace_callback($pattern $callback, $bbcode); 
+0

'[url = % 65xample.com] 내 도메인, URL [URL]과 같이 항상 작동하는 것은 아닙니다. 동일한 문자를 여러 가지 방법으로 표현할 수 있습니다. 간단한 regexes. – hakre