Найти строку, не окруженную BBcode, используя Regex - PullRequest
0 голосов
/ 12 сентября 2011

Мне нужно регулярное выражение, которое найдет и заменит слово / фразу в строке, только если оно отсутствует в [url] BBcode.

$string = "Word [url='http://domain.com']Word test[/url]";

Регулярное выражение не должно делатьчто-нибудь с «Word test», только первое вхождение «Word».

РЕДАКТИРОВАТЬ: Чтобы быть более конкретным, это дополнение для программного обеспечения форума, который отслеживает сообщения для упоминаний артистов.Если это происходит, имя исполнителя заменяется URL-адресом потока об этом исполнителе, если только он не является частью URL-адреса (либо в самой ссылке, либо в описании).После второго размышления его не следует запускать, если он используется в каких-либо тегах, которые не являются чистой разметкой (b, i, u, color, lists и т. Д.).Поэтому простой способ определить, какие теги можно заменить, был бы великолепен!

Заранее спасибо!

1 Ответ

0 голосов
/ 12 сентября 2011
$inputStr = "Coldplay [URL='localhost/threads/coldplay-paradise.32/']Coldplay - \"Paradise\"[/URL] Coldplay";

function replace( $matches ) {
    if( isset( $matches[2] ) && $matches[2] )
        return "[url='coldplay']".$matches[2]."[/url]";
    return $matches[0];
}

$regex = '/(\[.*?\].*?\[\/.*?\])?(Coldplay)?(.+?)?/si';
$outputStr = preg_replace_callback( $regex, 'replace', $inputStr );
echo $outputStr;

результат:

[url='coldplay']Coldplay[/url][URL='localhost/threads/coldplay-paradise.32/']Coldplay - "Paradise"[/URL] [url='coldplay']Coldplay[/url]
...