PHPを仕事で少し使用しております、Webデザイナーです。知識が少なく、正規表現での疑問がどうしても解決出来ずに困っております。限界を感じ質問させていただきました。どうぞよろしくお願いいたします。
PHPでURLにリンクを設定しております。文字列の中の「http」などで始まるURLにリンクを付けることは問題ないのですが、その中で「[nolink]http」といった特定の文字列が頭についているURLのみリンクを付けないようにしたいと考えております。ソースは以下の通りですが、上手くいきません。?!の個所を色々変えてみましたが、正しく認識されないorエラーが出てしまいます。
$body = preg_replace("/((?!\[nolink\])(https?|ftp)(:\/\/[A-Za-z0-9\+\$\;\?\.%,!#~\*\/:@&=_\-]+)/", "<a href=\"\\1\\2\" target=\"_blank\">\\1\\2</a>", $body);
そもそもの考え方が間違っているのか、中途半端な知識のため解決の糸口がつかめません。どうぞご教授頂けますようお願いいたします。
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
PHPの戻り読み否定をつかってみては?
(?<!\[nolink\])
<?
$body=<<<eof
xxxftp://example.com/ <br>
xxxftp://www.example.com/hoge.htm <br>
xxxftp://www.example.com/hoge.htm?x=1&y=1 <br>
xxxhttp://example.com/ <br>
xxxhttp://www.example.com/hoge.htm <br>
xxxhttp://www.example.com/hoge.htm?x=1&y=1 <br>
xxx[nolink]http://example.com/ <br>
xxx[nolink]http://www.example.com/hoge.htm <br>
xxx[nolink]http://www.example.com/hoge.htm?x=1&y=1 <br>
eof;
$pattern="/((?<!\[nolink\])http:\/\/[\w\d\.\/\?\&=]+)/";
$replacement="<a href=\"\\1\" target=\"_blank\">\\1</a>";
$body = preg_replace(
$pattern,
$replacement,
$body);
print $body;
?>
回答が遅れまして申し訳ございません。
$body = preg_replace("/((?<!\[double\])https?|ftp)(:\/\/[A-Za-z0-9\+\$\;\?\.%,!#~\*\/:@&=_\-]+)/", "<a href=\"\\1\\2\" target=\"_blank\">\\1\\2</a>", $body);
で出来ました!!
「先読み」と「戻り読み」ということについて初めて知りました。
問題解決&勉強になりました。本当にありがとうございました!!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- HTML・CSS リンクバナーのHTMLタグ。画像を変えたり、設置位置を変えるとバナー貼付け側はどう見える? 2 2023/02/01 12:01
- JavaScript フォームが空欄の時にフォームの外をクリックすると、エラーが出るコードを調べています。 1 2023/06/25 11:51
- WordPress(ワードプレス) Wordpressの記事URLを自由に決めたい 3 2022/06/02 12:05
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- JavaScript ブックマークレットについて 2 2022/10/09 11:48
- PHP PHPを使って、別サイトの一部を取得して表示したいのです。。 1 2023/01/18 21:45
- Excel(エクセル) エクセル関数の変わった使い方 3 2022/05/13 17:12
- Visual Basic(VBA) 特定の文字を簡単な操作で半角スペースに変換するか削除したい 2 2022/11/01 10:35
- PHP ここで言う空文字の意味とは? 1 2022/08/05 16:27
- 英語 口頭での"the following..."の可否等について 6 2022/08/19 01:01
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBSで"をエスケープする文字は?
-
ダブルコーテーション(
-
○分から○時間○分に変換
-
php 正規表現で、\\マークを取...
-
ダブルクォーテーションが置換...
-
文字列のアスタリスク置換
-
文字列の置換をCStringで(C++)
-
c# string型の変数に、ダブルク...
-
(から)までの文字列を削除したい
-
近似した文字列を置換するエク...
-
文字列の括弧について(初心者)
-
エスケープ文字の復帰(¥r)と...
-
ソースコードの1行が長いとき...
-
VBAのコマンドボタンの文字列の...
-
ファイルから読み取った改行文...
-
メッセージボックスで1025文字...
-
jsp 改行コードで改行させて表...
-
全角英数文字が嫌われる理由を...
-
全角括弧と全角読点の間隔を狭...
-
Excel関数「COUNTIF」で”文字”...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBSで"をエスケープする文字は?
-
ダブルコーテーション(
-
近似した文字列を置換するエク...
-
文字列の置換をCStringで(C++)
-
PHP・Wordpress preg_replaceを...
-
○分から○時間○分に変換
-
c# string型の変数に、ダブルク...
-
【PHP】preg_replace() で正...
-
(から)までの文字列を削除したい
-
nl2brが効かないのですが・・・
-
文字列の括弧について(初心者)
-
PHPでjavascriptを書き出すとき...
-
空白文字のカンマへの変換について
-
php 正規表現で、\\マークを取...
-
不規則なaタグのスクレイピング...
-
ダブルクォーテーションが置換...
-
マクロ関数 #define の効果は何...
-
文字列のアスタリスク置換
-
htmlspecialchars関数でエスケ...
-
文字列内にある「指定した空タ...
おすすめ情報