2011-09-12 11 views
0

[url] BBコードにない文字列内の単語/句を見つけて置き換える正規表現が必要です。正規表現を使用してBBコードに囲まれていない文字列を見つけよう

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

正規表現では、「Wordテスト」では「Word」の最初のオカレンスだけは実行しないでください。

EDIT:具体的には、これはフォーラムソフトウェアのアドオンで、アーティストの言及に関するメッセージを監視します。もしそうであれば、アーティストの名前は、そのアーティストのスレッドのURLに置き換えられます(リンク自体またはdescのいずれかになっていない限り)。もう一度考えると、純粋なマークアップではないタグ(b、i、u、color、listsなど)で使用されている場合は、それを引き起こすべきではありません。どのようなタグを定義する簡単な方法に置き換えることができます素晴らしいだろう!

ありがとうございます!

答えて

0
$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] 
+0

申し訳ありませんが、私は仕事にそれを得ることができませんでした。コールドプレイ - "パラダイス" [/ URL] コールドプレイ "という結果の文字列" Coldplay [URL:http://localhost/threads/coldplay-paradise.32/]/coldplay]]コールドプレイ[/ url] [url = 'http:// coldplay'] [/ url] ... "具体的には、これはアーティストの言及のメッセージを監視するフォーラムソフトウェアのアドオンです。それがURLの一部でない限り、アーティストの名前はそのアーティストに関するスレッドのURLに置き換えられます(URL自体またはdescのいずれか)。 – MartinAronsen

+0

@Martinあなたが間違ったことを知らない – nobody

+0

これは複数のアーティストを探しているので、メッセージに記載されているいくつかの異なるアーティストが問題になっています。これについては別の方法を試してみると思います – MartinAronsen

関連する問題