$pattern = "/\[url\=(.*)\](.*)\[\/url\]/i";
내 패턴은 bbcode를 html로 다시 작성하지만 내 도메인에서 링크를 제외하고 싶습니다. 정규식을 수정하여 내 외부 도메인의 링크가 아닌 모든 외부 링크에서 작동하도록 할 수 있습니까?예외가있는 코드 bbcode
/\[url\=((?:(?!example\.com).)*)\](.*)\[\/url\]/i
$pattern = "/\[url\=(.*)\](.*)\[\/url\]/i";
내 패턴은 bbcode를 html로 다시 작성하지만 내 도메인에서 링크를 제외하고 싶습니다. 정규식을 수정하여 내 외부 도메인의 링크가 아닌 모든 외부 링크에서 작동하도록 할 수 있습니까?예외가있는 코드 bbcode
/\[url\=((?:(?!example\.com).)*)\](.*)\[\/url\]/i
당신은 당신이 일반적으로 preg_replace_callback
기능을 사용하는 것이 그런 짓을 할 때마다 : 도메인을 가정
이 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);
'[url = % 65xample.com] 내 도메인, URL [URL]과 같이 항상 작동하는 것은 아닙니다. 동일한 문자를 여러 가지 방법으로 표현할 수 있습니다. 간단한 regexes. – hakre