WordPressで記事本文などの特定の文字列を検索や一括置換したい場合、「Search Regex」というプラグインがかなり使えます。
大規模な修正があった場合、記事200件とか300件も手動で修正は大変。
このプラグインはその作業を画面で簡単に行えるし、正規表現も使用できるので、結構複雑な条件でも対応可能です。
今回は、その正規表現のサンプルを紹介します。
なお、今回のバージョンは以下の通りです。
- WordPress 5.0.3
- Search Regex 1.4.16
WordPressプラグイン「Search Regex」のインストール
まずは、プラグインの新規追加で「Search Regex」を検索してインストール・有効化します。
Search Regexの使い方
インストール・有効化すると、「ツール」⇒「Search Regex」のメニューが表示され、この画面で一括置換を実行できるようになります。
ざっくりと主な項目を説明すると、以下のようになっています。
- Source … 記事本文、タイトルなど置換対象を選択
- Search pattern … 検索文字列・パターン
- Replace pattern … 置換文字列・パターン
- Regex … 正規表現を使用
- case-insensitive … 大文字・小文字を区別しない
- multi-line … 複数行モード
- dot-all … DOTALLモード
通常の文字列置換なら、検索文字列と置換文字列を入力します。
正規表現で検索する場合は、Regexにチェックして検索パターンを入力します。
正規表現の検索パターンは、/~/のようにデリミタで囲うことをお忘れなく。
- Search … 検索する
- Replace … 置換結果を表示する(まだ保存していない)
- Replace & Save … 置換して保存する
ボタンは3つあるので順番に、検索して、置換結果を表示して問題なければ、置換して保存と押していきます。
実行前に置換結果が確認できるので、とても便利です。
検索・一括置換する正規表現サンプル
何かいい例を、と思ったがなかなか浮かばないので、適当に。。
タグを一括置換
<strong>を多用していたので、<span class=”bold”>に置換してみます。
これぐらいなら、<strong>と</strong>を別々に<span class=”bold”>と</span>置換してもいいが、1発で置換するには以下のようにします。
- 検索パターン … /<strong>(.*?)<\/strong>/
- 置換パターン … <span class=”bold”>$1</span>
検索パターンのカッコ()で囲った箇所を、置換パターンの変数$1で参照しているので、タグ内の文字はそのままの状態で置換できます。
「(.*)」としてしまうと、「<strong>AAA</strong>と<strong>BBB</strong>」のように1行に複数回現れるところが1箇所として認識されて検索結果に上がっていたので、「(.*?)」とすることで最短マッチにできます。
外部リンクのアンカーを検索
続いて、アンカーで自分のドメイン以外のところにリンクされているものを検索してみます。
href=”…”の中が自分のドメインで始まるものを除外したいので、以下のようにしました。
- 検索パターン … /<a href=”(?!https:\/\/itlogs.net\/)(.*?)”(.*?)>/
(?!…)のところは否定的先読みというもので、指定のパターンが含まれないようにできます。
今回の場合は、href=”…”の間が「https://itlogs.net/」で始まるものが除外されています。
複数行にわたるタグを検索
続いて、<pre>など複数行にわたるタグを検索してみます。
classなど指定されている場合も考慮して、行頭から行末が<pre~</pre>になっているもの検索したいので、以下のようにします。
- 検索パターン … /^<pre(.*?)<\/pre>$/
- multi-line … チェックオン
- dot-all … チェックオン
^~$を使用するのでmulti-lineにチェックし、改行も含めてマッチさせるdot-allにもチェックして、複数行にわたってパターンマッチできました。
最後に
今回は、WordPressプラグイン「Search Regex」を紹介しました。
正規表現で記事本文を一括置換できる便利なプラグインです。
コメント
[…] 参考記事:「Search Regex」で記事本文を検索・一括置換する正規表現 […]