WordPressでプラグインSearchRegexを使って文字を一括置換する方法

スポンサーリンク

WordPressでプラグインSearchRegexを使って文字を一括置換する方法について解説します!

WordPressで記事を編集しているときに、文字を置換したくなるケースってありますよね。

  • 誤字に気が付いて誤字を修正したいとき。
  • サイトのssl化でhttpをhttpsに変更したいとき。
  • リンクURLを一括変更したいとき。
  • タグを一括で変更したいとき。

例を挙げ出せばきりがありません。
WordPressは便利機能満載ですから、こんな時にも役に立つプラグインがあります。
今回はそんな文字列の置換に便利なプラグインの「Search Regex」をご紹介します!

  • WordPressでプラグインSearchRegexを使って文字を一括置換する方法がわかる!

Search Regex

まずは機能の概要です!

Search Regexでは次のような操作を行うことができます。

  • 特定の文字列を検索や置換する事ができます!
  • 置換や検索には正規表現が使えます!

正規表現というのは「あ」で始まって「う」で終わる文字列みたいな指定です。
「あいう」も「ありがとう」も両方「あ」で始まって「う」で終わる文字列ですね。

置換の対象は主に以下になります。

  • コメントの投稿者、内容、URL、メールアドレス
  • 投稿(記事)の内容、抜粋、カスタムフィールド、タイトル、URL

※私はカスタムフィールドとかはできませんでした。詳しくは後述します。

対象はWordPress記事のデータベース部分というと良いんでしょうか。
WordPressの投稿画面などで記入するものが変更できる感じですね。

欠点と言ってしまうのもなんですが、テーマやプラグインの中までは検索や置換することができません。
逆にテーマまで変えてしまうと、思わぬところに影響が出てしまいますから、当然と言えば当然ですね。

テーマの内容を変える場合は、WordPressの外でやったほうが良いかもしれません。
一度ファイルをダウンロードして、テキストエディタの一括置換機能で置換してしまうような方法ですね!

という事で、一度作成した記事の内容の一括置換がとっても便利に行えます!

正規表現が使えるのは便利ですが、慣れないとちょっと難しいかもしれないですね。

  • 正規表現を使って文字列を検索や置換する事ができます!

Serch Regexの操作方法

では実際の操作方法についてです!

一応インストールするところから始めますね!

インストール

まずはWordPress管理画面にログインします。

プラグインの「新規追加」をクリックします。

キーワードに「Serch Regex」を入力します。
全部入れなくても途中で出てくるとは思いますが、一応コピペしやすいように全部書きました。

Search Regexが表示されるので「今すぐインストール」をクリックします。

インストールが完了するとボタンが変わります。

「有効化」をクリックします。

プラグイン画面に変わります。

有効化されたことを確認します。

インストール完了です!

使い方

特に設定も無いので、使い方に入ります!

ツールのSearch Regexをクリックします。

Search Regexの画面です。

  • Source:検索や置換の対象部分を選択するプルダウンです。
  • Limit to:検索で表示するヒット件数です。
  • Order By:IDの昇順と降順を選択できます。
  • Search pattern:検索や置換対象の文字列です。
  • Replace pattern:置換した後の文字列です。
  • Regex:正規表現を使う場合にチェックします。
  • Case-insensitive:大文字と小文字を区別しないチェックボックスです。
  • multi-line:正規表現の行頭^と行末$を有効にするチェックボックスです。
  • dot-all:正規表現の任意文字.に改行文字\t\nも含めてしまうチェックです。
  • Search>>:指定の内容で検索し、結果を表示させるボタンです。
  • Replace>>:指定の内容で置換した場合のBefore/Afterを表示させるボタンです。
  • Replace&Save>>:置換結果を反映させるボタンです。

これらの細かい操作についてはこの後解説します。

ここではとりあえず「Search pattern」に文字列を入力し、「Search>>」をクリックします。
ちなみにこの「Search>>」の操作はスキップしてもさほど問題ありません。

検索結果が表示されます。

これで置換対象があっているか確認できるわけですね。
続いて「Replace pattern」に置換したあとの文字列を入力し、「Replace>>」をクリックします。
この操作を行ってもまだ置換は実行されません。

置換した場合にどうなるかが表示されます。

内容に問題が無ければ「Replace&Save>>」をクリックします。
これをクリックすると簡単には後戻りはできません。
いきなり「Replace&Save>>」操作からできてしまいますが、事前に「Replace>>」でチェックされる事をおすすめします。

置換に成功しました。

ここまでが基本的な操作方法になります。

いきなり置換すると戻れないので確認してから置換しましょう!。

  • 単純な置換なら文字列を入力するだけです!

詳細

Source

Sourceプルダウンについてです。

検索や置換の対象を変更できます。

  • Comment author:コメントの投稿者を対象にします。
  • Comment author email:コメントのメールアドレスを対象にします。
  • Comment author URL:コメントのURLを対象にします。
  • Comment content:コメントの内容を対象にします。
  • Post content:投稿(記事)の内容を対象にします。
  • Post excerpt:記事の抜粋を対象にします。
  • Post meta value:記事のカスタムフィールドを対象にします。
  • Post title:記事のタイトルを対象にします。
  • Post URL:記事のURLを対象にします。

ちなみにPostと書いてますが、固定ページも対象になります。

デフォルトのPost contentで記事の内容を対象にできますので、通常これで使う事になると思います。
と言いますか、私はPost content以外まともに動きませんでした。

んーあまりそういうところを誰も指摘していないので、バージョン的なものが問題かもしれないですね・・・。
一応2019/2/23時点では確かにWordPress4.5.13まで対応していて、当サイトは5.0.3ですからね。

Post contetだけはまともに動いているので、まあ支障はないのですが。

Limit to

Limit toプルダウンについてです。

検索や置換の結果の表示件数を変更できます。

  • No limit:制限なく検索結果を表示します。
  • 10:10件だけ表示します。
  • 25:25件だけ表示します。
  • 50:50件だけ表示します。
  • 100:100件だけ表示します。

No limitに設定し、対象が膨大にあると、ブラウザに大量に表示されるので注意しましょう。

ちなみにこちらもバージョンの為なのか、どれにしてもNo limit状態です。

全件表示されますし、全件置換されました。
ちょっと注意が必要ですね。

Order by

Order byプルダウンについてです。

検索や置換の結果の表示件数を変更できます。

  • Ascending:IDの昇順に表示します。
  • Descending:IDの降順に表示します。

さて、これもバージョンの問題などで効果ないのかな・・・と思いきや、きちんと機能していました。

SourceやLimit to等、一部気を付けた方がいいですね!

  • 適したバージョンでないためか、正常に機能しなくなる場合もあるようです!

Regex

Regex等のチェックボックスについてです。

正規表現の書き方や効果を変更する事ができます。

  • Case-insensitive:大文字と小文字を区別しないチェックボックスです。
  • multi-line:正規表現の行頭^と行末$を有効にするチェックボックスです。
  • dot-all:正規表現の任意文字.に改行文字\t\nも含めてしまうチェックです。

正規表現はちょっと難しいところもありますし、なんか独特なところがあるんですよね。
少し解説しておきます。

Case-insensitive

こちらはまんまその通りの動きをしてくれます。

  • Serch pattern:/abc/

これに対してRegexとCase-insensitiveにチェックを入れてSearch>>した結果です。

対象文字列結果
abcfound
ABCfound
abCfound
Abcfound

通常通りの思った結果になります。

multi-line

一応正規表現にも簡単に触れておきます。
^は行頭、$は行末を表す記号です。

  • Serch pattern:/^abc/

とすると、行頭にabcのある行がヒットするはずです。

これに対してRegexとmulti-lineにチェックを入れてSearch>>した結果です。

対象文字列結果
abcabcfound
abcABCfound
ABCabcnot found
Abcabcnot found

通常通りの思った結果になります。

  • Serch pattern:/abc$/

とすると、行末にabcのある行がヒットするはずです。

これに対してRegexとmulti-lineにチェックを入れてSearch>>した結果です。

対象文字列結果
abcabcnot found
abcABCnot found
ABCabcnot found
Abcabcnot found

ちょっと想定外です。
次のようにします。
.は任意の文字という意味になります。

  • Serch pattern:/abc.$/

これに対してRegexとmulti-lineにチェックを入れてSearch>>した結果です。

対象文字列結果
abcabcfound
abcABCnot found
ABCabcfound
Abcabcfound

どうやら行末の前に何かが一文字いるようですね。

  • Serch pattern:/abc\r$/

\rは改行文字で、cr(キャリッジリターン)です。
ちなみに\nも改行文字で、lf(ラインフィード)です。

タイプライターでカーソルを左にずらすのがcr、行を変えるのがlfですね。

これに対してRegexとmulti-lineにチェックを入れてSearch>>した結果です。

対象文字列結果
abcabcfound
abcABCnot found
ABCabcfound
Abcabcfound

どうも行末にcr文字が入っているようです。
\r$\n^(cr,行末,lf,行頭)という並びになっています。
\rでcrして、行末になって、\nでlfして、行頭という事ですね。

自分で書いていてちょっと専門的すぎるかなって少しだけ反省したりしています。

環境にもよるかもしれませんが、気を付けてみてください!

なお、行頭と行末を挟む場合は次のような感じです。

  • Serch pattern:/abc\r\n^abc/
対象文字列結果
abc
abc
found

行頭がしっかり効いていますね。
行頭も見てみます。

  • Serch pattern:/abc\r$\nabc/
対象文字列結果
abc
abc
found

問題なさそうですね。

dot-all

.は任意の文字でした。
ただ、これには改行は含みません。
次のケースを見てみます。

  • Serch pattern:/abc.*abc/

.*は任意の文字が繰り返すという意味になります。
abcで始まり、改行を除くあらゆる文字列を経てabcで終わればいいわけです。

abcで改行してabcのある行がヒットするか見てみます。

これに対してRegexにチェックを入れてSearch>>した結果です。

対象文字列結果
abcabcfound
abc
abc
not found

つまり.は改行文字までは含んでいないことになります。
ちなみにmulti-lineを入れても変わりません。
multi-lineは複数行かどうかのチェックに見えますが、^$が使えるかどうかです。

  • Serch pattern:/abc.*abc/

これに対してRegexとdot-allにチェックを入れてSearch>>した結果です。

対象文字列結果
abc
abc
found
multi-lineとdot-all

ちょっと細かいですが次も確認しておきます。

  • Serch pattern:/abc.$.^abc/

これに対してRegexとmulti-lineとdot-allにチェックを入れてSearch>>した結果です。

対象文字列結果
abc
abc
found

\rも\nも.で表現できるのでヒットしました。
では次はどうでしょうか。

  • Serch pattern:/abc....abc/

abcとabcの間に4文字分無いとヒットしません。
改行文字は1文字とカウントされます。
$^がカウントされれば4文字でヒットするはずです。
これに対してRegexとmulti-lineとdot-allにチェックを入れてSearch>>した結果です。

対象文字列結果
abc
abc
not found

.は$や^にはなれないという事ですね。
まあ、そもそも^$はそういう文字があるわけではないので、.では表せませんね。
ということで次もやっておきます。

  • Serch pattern:/abc..abc/

これに対してRegexとmulti-lineとdot-allにチェックを入れてSearch>>した結果です。

対象文字列結果
abc
abc
found

想定通りの結果になりますね。
では次はどうでしょうか?

  • Serch pattern:/abc..abc/

これに対してRegexとdot-allのみにチェックを入れてSearch>>した結果です。

対象文字列結果
abc
abc
found

これはまあ当然ですね。
問題はこちらです。

  • Serch pattern:/abc.$.^abc/

これに対してRegexとdot-allのみにチェックを入れてSearch>>した結果です。

対象文字列結果
abc
abc
not found

multi-lineのチェックが無いので$^は使えませんでした。
最後にこれを見ておきます。

  • Serch pattern:/abc\r\nabc/

これに対してRegexのみにチェックを入れてSearch>>した結果です。

対象文字列結果
abc
abc
found

という事で、multi-lineは別に複数行を検索するというわけではないんですね。
$^を使った検索ができるというだけの話です。
複数行は\r\nを使うかどうかという話になります。

multi-lineは$^の表現を使うときにチェックを付けましょう!

  • multi-lineは複数行というわけではありません!
  • 改行と$^の関係は、\r,$\n,^という順になります!

おまけ

いくつかよくありそうなパターンを紹介しておこうかなと思います。

httpからhttpsへ変更

これはもう普通に置換するだけで良さそうですね。

  • Serch pattern:http
  • Replace pattern:https

これに対してRegexにチェックを入れずにReplace>>した結果です。

beforehttp://example.com
afterhttps://example.com

タグのつけ替え①

例えばh2をh3に換えたいときはこんな感じです。

  • Serch pattern:/\<h2\>(.*)\<\/h2\>/
  • Replace pattern:<h3>$1</h3>

これに対してRegexのみにチェックを入れてReplace>>した結果です。

before<h2>見出しだよ!</h2>
after<h3>見出しだよ!</h3>

タグのつけ替え②

h2からh3のような簡単なものでなくてももちろんできますね。
<hoge>の中でmoge=”noge”のものを<loge>に付け替えてみましょう。

  • Serch pattern:/\<hoge(.*?)moge=”noge”(.*?)\>(.*?)\<\/hoge\>/
  • Replace pattern:<loge$1 $2>$3</loge>

これに対してRegexのみにチェックを入れてReplace>>した結果です。

before<hoge koge=”koge” moge=”noge” joge=”joge”>マルヒだよ!</hoge>
after<loge koge=”koge” joge=”joge”>マルヒだよ!</loge>

こんな感じでうまくいきましたね!

便利なツールなので使いこなせると困ったときに助けてくれます!

  • 普通に置換するだけならとっても簡単です!
  • 正規表現に多少クセがあるなと思います!
  • いきなり置換するのはやめておきましょう!
スポンサーリンク

まとめ

いかがでしたでしょうか?

正規表現のチェックとか、プルダウンとか、よく検証してから実行しないとちょっと危険なので気を付けましょうね!
特にmulti-lineとdot-allは少しクセがある感じなので、要注意です!

検証した結果がお役に立てば幸いです!
※バージョン違いで検証するなという話もありますが・・・。

  • WordPressでプラグインSearch Regexを使って文字を一括置換する方法でした!
  • Search Regexの正規表現について細かい動きまで検証してみました!

ここまでお読みくださりありがとうございました!