0

ホストされた wiki アプリケーション ページの HTML を本質的に返す API 呼び出しがあります。次に、substr、str_replace、preg_replace カンフーを実行して、サイトのスタイル ガイドに従ってフォーマットします。

左のナビゲーションをフォーマットするための呼び出しを 1 セット行います (pageX へのリンクを wikiParse?page=pageX タイプのものに変更します)。左側のナビで安全にこれを行うことができます。ただし、本文では、リンクが内部ページへのリンクであると安全に想定することはできません。外部リソースへのリンクである可能性が非常に高いです。したがって、http:// が続かない href= に一致する preg_replace を実行する必要があります。

ここに私の刺し傷があります:

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

これにより、ページのコンテンツ全体が取り除かれるようです。私がどこで滑ったか分かる人はいますか?遠く離れているとは思いませんが、次にどこに行くべきかわかりません。

乾杯

4

2 に答える 2

1

preg_*関数は、 Perl 互換の正規表現 (PCRE) を想定しています。通常の正規表現との構造上の違いは、式自体がデリミタにラップされ、式と可能な修飾子を分離することです。古典的な区切り文字は ですが/、PHP ではバックスラッシュ以外の英数字以外の文字を使用できます。PHP での PCRE の紹介も参照してください。

だからこれを試してください:

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

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

于 2009-04-09T12:52:22.960 に答える
1

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

$result = preg_replace('/href\=\"(?!http\:\/\/)/','href="bla?id=',$result);
于 2009-04-09T12:53:14.643 に答える