【正規表現】文章からリンクの抜き出し方、HTMLのaタグに置き換えるプログラムも紹介

リンクをaタグに変換

今回は、正規表現を使った文章からリンク(URL)を抜き出す方法をご紹介します。

追加でJavaScript、PHPでのaタグ置き換え例も記載しています。

正規表現でURLをマッチさせる

URLをマッチさせるには、以下の正規表現を用います。

/(https?:\/\/[\w!?/+\-_~;.,*&@#$%=()'[\]]+)/

http(s)://から始まり、英数字、その他対象となる記号が含まれる部分までをマッチさせています。

JavaScriptでの実装例

ここでは、文章内に含まれているリンクをaタグに置き換えるプログラム例をご紹介します。

const original_text=`次のURLにアクセスしてください:https://example.com`;
const replaced_text=original_text.replaceAll(/(https?:\/\/[\w!?/+\-_~;.,*&@#$%=()'[\]]+)/g,`<a href="$1" target="_blank">$1</a>`);

正規表現をカッコ()でくくることで、マッチした部分を$1として置き換えることができます。

ちなみに、文章内にリンクが含まれているかどうかを検知するプログラムは次のようになります。

const original_text=`次のURLにアクセスしてください:https://example.com`;
if (original_text.match(/https?:\/\/[\w!?/+\-_~;.,*&@#$%=()'[\]]+/)) {
  console.log('URLが含まれています');
} else {
  console.log('URLが含まれていません');
}

PHPでの実装例

ほかの言語でもほぼ同様に、正規表現を用いた置き換えを行うことができます。

$original_text='次のURLにアクセスしてください:https://example.com';
$replaced_text=preg_replace("/(https?:\/\/[\w!?/+\-_~;.,*&@#$%=()'[\]]+)/",'<a href="$1" target="_blank">$1</a>',$original_text);
$original_text='次のURLにアクセスしてください:https://example.com';
if(preg_match("/https?:\/\/[\w!?/+\-_~;.,*&@#$%=()'[\]]+/",$original_text)){
  echo "URLが含まれています";
} else {
  echo "URLが含まれていません";
}