【WordPress】はてなブログからのインポート時に自動生成される目次を一括削除する正規表現

はてなブログで[:contents]を使い目次を作っていた場合、WordPressへ記事をインポートすると目次が自動生成される。

WordPressでTOC+などのプラグインで目次を生成すると、自動生成した目次と重複してしまう。

この自動作成された目次を全記事で一括に削除する

Search Regexのインポートと有効化

Search RegexはWordPressの記事やコメントを「正規表現」を用いて検索・置換できるプラグイン。
https://ja.wordpress.org/plugins/search-regex/

このプラグインをダウンロードしインストール→有効化する。

目次を削除する正規表現

ツール→Search Regexの「Search pattern」に下記を入力する。この時「Regex」チェックボックスもONにすること。

|<ul class="table-of-contents">[\s\S]+?</ul><p>|

また「Replace pattern」に「<p>」を指定する。

Searchで検索。Replaceで置換した時のプレビュー。

プレビューを確認し問題なければ「Replace & Save」で保存してください。

なお「Search Regex」はWordPressのデータベース(MySQLなど)を直接編集するため後戻りできません。

「All-in-One WP Migration」プラグインなどを使って事前にバックアップすることをオススメします。

正規表現の解説

今回使用した「正規表現」をざっくりと解説します。

|<ul class="table-of-contents">[\s\S]+?</ul><p>|

正規表現とは

「正規表現」はテキストの「マッチングによる抜き出し」や「置換」を行う機能の総称。

多くのプログラム言語で利用されておりおおよそ共通したルールで実装されている。

Search RegexはPHPで採用されているPCRE系の正規表現が利用できる。

前後の「|(パイプ)」

Search Regexでは正規表現をデミリタで括るよう指定されている。

Search Regexでのデミリタは「|(パイプ)」です。

検索範囲の指定

パイプで囲まれた部分が正規表現となる。

前半分が「開始点の指定」です。自動作成された目次は「class=”table-of-contents”」属性が付与された「<ul>」タグで固定されているので検索が可能です。

<ul class="table-of-contents">



終了点は必ず「</ul>」ですが「</ul>」は目次中に何度も登場するので場所が指定できません。

目次の最後の「<ul>」は必ず「<p>」タグが続きますので「</ul><p>」と指定します。

</ul><p>

ただこうすると最後の<p>も置換対象となり消えてしまうので「Replace pattern」に「<p>」を指定し補完してあげます。

開始と終了に挟まれた文字の表現

下記で「あらゆる文字の繰り返し」を表現しています。

[\s\S]+?

「\s」は半角スペース、タブ、改行のどれか1文字
「\S」半角スペース、タブ、改行以外の1文字

これを「[]」で括ることにより「すべての種類の文字1文字」となります。

「+」は直前の文字の1回以上の繰り返しです。

つまり「[\s\S]+」はすべての種類の文字の1回以上の繰り返しとなります。


そうすると下記でも良さそうなのですが。。。

|<ul class="table-of-contents">[\s\S]+</ul><p>|

正規表現は「最長一致」するようなっていますので、たまたま記事中に</ul><p>が2回出てくると、2回目の</ul><p>を終端と判断してしまいます。

「+」を「+?」にするとにより「最短一致」となり希望の動作となります。

|<ul class="table-of-contents">[\s\S]+?</ul><p>|

正規表現はヤヤコシイですが非常に便利ですし、どうしても必要になる場面も多いのである程度使えるようになったほうが良いですよ。

コメントを残す

メールアドレスが公開されることはありません。