2009-04-09 3 views
0

私は主にホストされているwikiアプリケーションページのHTMLを返すAPI呼び出しを持っています。次に、私のサイトのスタイルガイドに従って、substr、str_replace、preg_replace kung-fuをフォーマットします。ローカルリンクを置換する、外部リンクを維持する

左のナビゲーションをフォーマットするコールを1回行います(pageXへのリンクをwikiParse?page = pageXタイプに変更します)。私は安全に左のナビゲーションでこれを行うことができます。しかし、本文では、リンクが内部ページへのリンクであるとは思えません。それは非常によく外部リソースへのリンクになる可能性があります。ですから、href =と一致するpreg_replaceを実行する必要があります。これにはhttp://が続きません。ここで

はそれで私の刺しです:

$result = preg_replace('href\=\"(?!http\:\/\/)','href="bla?id=',$result); 

これは、ページ上のコンテンツ全体を取り除くように思われます。誰もが私がスリップした場所を見ますか?私はあまりにも遠くにいるとは思わない、ちょうど次の場所に行くことができない。

乾杯

答えて

1

preg_* functionsPerl-Compatible Regular Expressions (PCRE)を期待しています。通常の正規表現との構造的な相違点は、式自体が式を可能な限り区切る区切り文字に囲まれていることです。modifiers古典的な区切り文字は/ですが、PHPではバックスラッシュ以外の英数字以外の文字も使用できます。 Intruduction to PCRE in PHPも参照してください。

だから、これを試してみてください。

$result = preg_replace('/href="(?!http:\/\/)/', 'href="bla?id=', $result); 

ここhref="(?!http://)は正規表現です。しかし、区切り文字として/を使用すると、正規表現内の/は、バックスラッシュを使用してエスケープする必要があります。

+0

グッドアイ!私はそれが何か明白なことを知っていた...ありがとう。 –

1

正規表現には開始と終了の区切り文字(デフォルトは '/')がありません。

$result = preg_replace('/href\=\"(?!http\:\/\/)/','href="bla?id=',$result); 
関連する問題