• ベストアンサー
  • 困ってます

同行のurlの片方にアンカーをつける正規表現

  • 質問No.9711958
  • 閲覧数69
  • ありがとう数0
  • 気になる数0
  • 回答数2
  • コメント数0

お礼率 0% (7/1661)

正規表現について、同じ行のurlの片方だけにアンカーをつけるには
http://hoge.jp/ http://hoge2.jp/
http://hoge3.jp/ http://hoge4.jp/
こういう行があったとして、
http://hoge.jp/ <a href="http://hoge2.jp/">http://hoge2.jp/</a>
http://hoge3.jp/ <a href="http://hoge4.jp/">http://hoge4.jp/</a>
こういう結果を得たいですが、可能でしょうか

質問者が選んだベストアンサー

  • 回答No.2
  • ベストアンサー

ベストアンサー率 70% (988/1395)

他カテゴリのカテゴリマスター
$str = <<<EOF
http://hoge.jp/ http://hoge2.jp/
http://hoge3.jp/ http://hoge4.jp/
EOF;

$eg = '^(http://[^\s]+)\s+(http://[^\s]+)$';
$rp = '$1 <a href="$2">$2</a>';

~以上の様に変数等を設定した場合で…

$re = preg_replace( "#$eg#m", $rp, $str ); //PHP
$re =~ s#$eg#$rp#; //Perl
$re = $str.replace( $eg, $rp ); //Javascript

~大体、こんな感じで通るはずです。質問者が実際に置換処理を行う環境に基づいて適当に最適化してください。

P.S.
正規表現ではURLなどの文字列内部に / が含まれる場合を想定し、マッチング用の正規表現パターンを囲う左右両側の「区切り文字」に / だけではなく、空白文字以外の対になる記号文字なら何でも使用可能です(例文では # を使用)。

その他の回答 (全1件)

  • 回答No.1

ベストアンサー率 72% (4505/6243)

他カテゴリのカテゴリマスター
「URLを、『http://』で始まり、コロンを含まない任意長の文字列とする」
「ただし、行末にあるもののみ置換対象」
と考えて、

s/(http:\/\/[^:]*)$/<a href="$1">$1<\/a>/;

これでいいですかね。
※OKWave上では円記号がバックスラッシュに表示されますがそのままコピペして下さい。V のように見えるのは「¥/」と書いた部分です)

なおperl上で実験したところ、行末の改行記号までURLに含んでしまったのか少々不自然になったので、直前にchop;を入れるか、

「URLにコロンと改行記号を含まない」として

s/(http:\/\/[^:\n]*)$/<a href="$1">$1<\/a>/;

にするのも良いかもしれません。
(テキストエディタの置換や、sed等では最初の通りで問題ない気がします)

置換したいものが「行末」ではなく「2番目」だったり、httpであったりなかったりするとまた書き方を変えないといけなくなってきますけど…。
結果を報告する
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。
関連するQ&A

その他の関連するQ&Aをキーワードで探す

ピックアップ

ページ先頭へ