ベタ打ちのURLリンクを正規表現でMarkdown形式に変換する

この記事は鷹野雅弘によって執筆されました。
公開日:2017年11月13日、更新日:2017年11月13日
 

次のようなテキストファイルをHTMLにする場面があります。    

・オーディオ買取屋
 https://audio.kaitori8.com/
  まずは次のようにMarkdown形式にしてから、

- [オーディオ買取屋](https://audio.kaitori8.com/)

つまり、「テキスト→Markdown→HTML」のようにしているのですが、この「テキスト→Markdown」をチカラワザでなく、正規表現でやろうと取り組みました。

なお、Jedit Ωにて検証。こうするといいですよ、ではなく、ダマシダマシこうやってみた、という記事です。

1行目を選択する

まずは1行目。

^(.+)[\1]のように検索置換してみます。

  • ^は文頭
  • (.+)は任意の文字列。()で囲むことでグループとして扱い、\1にて置換対象とする

その結果、[・オーディオ買取屋]となってしまいます。

「・」が不要です。さらに、このままでは「 https://audio.kaitori8.com/」も検索対象になってしまいます。

「・」を検索対象からはずす

^・(.+)[\1]のように検索置換すると、無事に[オーディオ買取屋]となりました。

「・」が不要なため、^・(.+)のように()から追い出しました。

1行目と2行目をまたがって検索対象にする

^・(.+)\nとすると、改行コードまでは検索対象にできるのですが、2行目までを連続して検索対象にできません。

調べたところ、[\s\S]で可能そうなので、^・(.+)[\s\S](.+)[\1](\2)と実行すると、残念ながら、[オーディオ買取屋]( https://audio.kaitori8.com/)のようにスペースが残ってしまいます。

全角スペースを削除する

^・(.+)[\s\S]\s(.+)のように\sを入れてみたら、htmlの前のスペースは消え、[オーディオ買取屋](https://audio.kaitori8.com/)のようにできました。

または、^・(.+)\n[\s\S](.+)のように[\s\S]の前に\nを入れることでも解消。

[\s\S]は「改行を含む任意の1文字」という意味ですので、前者だと改行コードと物理的な改行(次の全角スペースは非対象)。後者だと、まず、\nで改行コードとマッチングし、[\s\S]で物理的な改行と2行目のスペースということでしょうか。

例外的な体裁への対応

前提は、次のようなテキストファイルがあることでした。    

・オーディオ買取屋
 https://audio.kaitori8.com/
  次のように「・」やスペースが入っていないときにも対応できるように考えてみます。

 

オーディオ買取屋
https://audio.kaitori8.com/

  • ・?のように?を付けることで、「・」がない場合にも対応できますが、これによって対象が広くなりすぎてしまいます。
  • 2行目の全角スペースも\s?とすることで、入っていない場合にも対応。
  • そこで「2行目にhttpが入る」ことを条件に加えるべく、(.+)(.*http.*)としました。
  • .*http.*は「http」を含む文字列を対象にします。

ここまでのまとめ

  • 検索:^・?(.+)[\s\S]\s?(.*http.*)
  • 置換:- [\1](\2)

続く

追って掲載。

YouTube

DTP TransitのYouTubeチャンネルです。1分前後のクイックTipsを投稿しています。

チャンネル登録

Twitter

本サイトの記事以外に、小ネタやタイムリーな話題などをツイートしています。

マンスリーでまとめています。

このページの上部に戻る