Amazon10/19まで!プライム感謝祭開催中! セール会場へ

Search Regex│正規表現を使った文字置換方法

Search Regexで、テーマ変更後に残ったショートコードをURLへ置換する例です。対象は投稿本文に保存された単純なテキスト形式に限定します。ブロックのJSON属性や入れ子のHTMLを一括変換する式ではありません。

目次

著者

WEB制作をしているデジタルノマド
WordPressのカスタマイズが好きで、色々と自作しています。

WordPressのカスタマイズに困ったらご相談ください!

置換前に対象とバックアップを決める

データベースをバックアップし、復元できる検証環境で試します。「ツール → Search Regex」で検索元を投稿にし、本文だけを対象に指定します。最初は投稿IDなどで1件に絞り、検索のみで一致範囲を確認してください。タイトル・抜粋・オプション・メタ情報は今回の対象に含めません。

sankoショートコードをURLに置換する

次のようにhrefが先頭の属性で、属性値が半角の二重引用符で囲まれた形式を対象にします。全角・曲がった引用符、単一引用符、属性順の違い、角括弧を含む属性値には一致させません。対象外は個別に確認します。

[sanko href="https://example.com/article/" title="記事タイトル" site="サイト名"]

検索欄で正規表現を有効にし、次の式を貼り付けます。式の前後に / は付けません。

\[sanko\s+href="(https?://[^"\s\[\]]+)"(?:\s+[a-zA-Z_-]+="[^"\[\]]*")*\s*\]

置換欄は次の値です。URLを取得する括弧が1組なので、$1でその内容を使います。

$1

貪欲な (.*) を使わず、属性の引用符とショートコードの終端を越えない形にしています。同じ行に2個ある場合も別々に置換します。ただしコード例として掲載した文字列も一致するため、記事の文脈まで確認してください。

検索結果を確認してから適用する

検索操作だけではデータベースは変わりません。プレビューでショートコード全体だけが選ばれ、前後の文章が残ることを確認します。結果の個別変更では「一致箇所のみに適用」を使い、行全体をURLに置き換えないでください。1件を変更して公開画面と編集画面を確認してから、同じ条件の対象に広げます。

置換後はURL文字列になります。ブログカードになるかはテーマ、ブロックの種類、URLの配置によります。SWELLでもすべての保存形式で自動カード化するとは限りません。カードにならなければ編集画面で対応するブログカードへ設定し直してください。

吹き出しの中身だけ残す場合

属性なし・入れ子なしの mysay に限る式です。改行を含む本文を取得し、入れ子では内側だけが一致する場合があるため、入れ子のある本文はこの置換の対象外にします。置換値は $1 です。

\[mysay\]((?:(?!\[/?mysay\])[\s\S])*)\[/mysay\]

ブロックの変換は別に扱う

見出しブロックがないことだけで、クラシックエディタの記事とは判定できません。またJINのボックスをSWELLへ移す際、正規表現でdivをたどると入れ子部分を欠損させるおそれがあります。このページの式でブロックHTMLを変換しないでください。検証用記事で移行先ブロックを作成し、見出し・本文・リンク・画像を移して編集画面のブロック検証を通す方法を使います。

検証と戻し方

例のPCRE式は、単独・同一行の複数・改行・対象外の引用符・前後の文章を含むテストで確認しています。利用環境のSearch Regex画面での一括更新や、テーマ移行後の全記事表示まで保証するものではありません。公開画面ではPCとスマホ、リンク先、ブロックのエラーを確認します。

誤置換したら追加の置換を止め、対象本文を保存済みの変更前データから戻します。データベース全体を戻す場合は、バックアップ後の注文・コメント・編集内容も巻き戻る点を確認して実施してください。

公式資料:結果と一致箇所の置換、検索と一括置換の違い。

よくある質問:Search Regexで正規表現を使って文字置換するとき

この記事は、何を置換する方法を扱っていますか?

記事では、Search Regexで、テーマ変更後に残ったショートコードをURLへ置換する例です。対象は投稿本文に保存された単純なテキスト形式に限定します。ブロックのJSON属性や入れ子のHTMLを一括変換する式ではありません。

置換する前に、何をしますか?

記事では、データベースをバックアップし、復元できる検証環境で試します。「ツール → Search Regex」で検索元を投稿にし、本文だけを対象に指定します。最初は投稿IDなどで1件に絞り、検索のみで一致範囲を確認します。タイトル・抜粋・オプション・メタ情報は、今回の対象に含めません。

どんな形式のショートコードが対象ですか?

記事では、hrefが先頭の属性で、属性値が半角の二重引用符で囲まれた形式を対象にします。全角・曲がった引用符、単一引用符、属性順の違い、角括弧を含む属性値には一致させません。対象外は個別に確認します。

検索欄や置換欄は、どう入力しますか?

記事では、検索欄で正規表現を有効にして式を貼り付けます。式の前後に「/」は付けません。置換欄は、URLを取得する括弧が1組なので、$1でその内容を使います。

「検索」を押すと、データベースが変わりますか?

変わりません。記事では、検索操作だけではデータベースは変わりません。プレビューでショートコード全体だけが選ばれ、前後の文章が残ることを確認します。結果の個別変更では「一致箇所のみに適用」を使い、行全体をURLに置き換えません。

置換したあと、ブログカードになりますか?

なるとは限りません。記事では、置換後はURL文字列になります。ブログカードになるかは、テーマ、ブロックの種類、URLの配置によります。SWELLでもすべての保存形式で自動カード化するとは限らず、カードにならなければ編集画面で対応するブログカードへ設定し直します。

ブロックのHTMLも、正規表現で変換してよいですか?

変換しないでください。記事では、JINのボックスをSWELLへ移す際、正規表現でdivをたどると入れ子部分を欠損させるおそれがあります。検証用記事で移行先ブロックを作成し、見出し・本文・リンク・画像を移して、編集画面のブロック検証を通す方法を使います。

置換を間違えたときは、どうしますか?

記事では、誤置換したら追加の置換を止め、対象本文を保存済みの変更前データから戻します。データベース全体を戻す場合は、バックアップ後の注文・コメント・編集内容も巻き戻る点を確認して実施します。なお、記事の式は、利用環境のSearch Regex画面での一括更新や、テーマ移行後の全記事表示まで保証するものではありません。

  • URLをコピーしました!

プラグインの設定でお困りなら

プラグインの導入・カスタマイズ代行

プラグインの選定から設定、競合の解消、動作に合わせた追加実装まで承ります。1時間 ¥8,000〜(税込)。

WAZAの有料記事のサブスクリプションも開始しました。

サービス

Service

WordPressサイトのカスタマイズのサービスに関心がありましたら、ぜひ詳細をご覧ください。

目次