東京都府中市、渋谷区のWEB制作会社Maromaroのブログです

2016.01.03

Sasaki

DreamWeaverで正規表現を使って検索置換する方法

明けましておめでとうございます!
Maromaro佐々木です。

Dreamweaverの「検索および置換機能」の正規表現について今回書きたいと思います。
DW正規表現この部分.fw

そもそも正規表現とは?な方も多い気がしていますが、とっても便利なので聞いただけで拒絶反応が出る方は拒絶反応を無くしていきましょう!
では簡単な利用方法とDreamweaverでの使い方説明していきます。

正規表現とは

正規表現(せいきひょうげん、英: regular expression)とは、文字列の集合を一つの文字列で表現する方法の一つである。

引用元:https://ja.wikipedia.org/wiki/%E6%AD%A3%E8%A6%8F%E8%A1%A8%E7%8F%BE
となっています。

簡単に言うと文字を表すための記号みたいなものです。

例えば「.」は任意の一文字を表します。
正規表現でドットだけで検索すると全ての文字を拾ってきてしまうかと思います。
DW正規表現2.fw
とんでもな379898個にマッチとなってしまいます。

よく使われそうな正規表現をピックアップしてみました。
「.」 => 任意の一文字を表します
「*」 => 0回以上の表現の繰り返しにマッチする
「+」 => 1回以上の表現の繰り返しにマッチする
「?」 => 0個か1個の表現にマッチする
「[]」 => 括弧内に含まれる一文字にマッチする 0-9やa-zとすると0,1,2,3,4,5,6,7,8,9 aからzまでにマッチします。A-Zやあ-ん等とも書いたりできます。
「[^]」 => 括弧内に含まれない一文字にマッチする
「^」 => 行の最初にマッチする
「$」 => 行の最後にマッチする
「()」 => 括弧内にマッチした文字列を後から呼び出せる
「\n」 => 改行にマッチ \r\nがWindows \rがMac \nがlinux等
「{x,y}」=> 直前の”ブロック”の x 回以上 y 回以下の繰り返しにマッチする。例えば、”a{3,5}” は aaa、aaaa、aaaaa にマッチする。

だいたいこんな所を覚えておけば問題ないかなと思います。
上記にある正規表現を文字として扱いたい場合には\でエスケープしてあげればOKです。
\*
とするとアスタリスクが検索できます。

因みにエスケープ文字はWindowsでは¥(半角文字で)マーク Mac等ではバックスラッシュです

どんな時につかうの?

普通の検索だとhogehogeと検索するとhogehogeがマッチする文字しか検索ができないかと思います。
また、hoge1~hoge9999まである文字列を1hoge~9999hoge
のように反対にしようとしたとき、9999回検索置換しないといけないですよね(極端ですが)
そんな時に正規表現を使うと1回の検索で様々なパターンに対応できてしまうのです!

正規表現についてはほとんどのエディタに対応していますし、Dreamweaverだけの機能ではないので
覚えておいて損はないと思います!

と、やってみないと分からない部分も多いと思いますので・・・

実際にDreamweaverで検索・置換してみる

Dreamweaverで正規表現を利用する際には「正規表現を使用」にチェックをいれてくださいね。
(使わない時には外すように)

hoge1〜hoge10の文字列をピックアップしたい

正規表現で簡単に考えると下記のようになりそうでしょうか。
hogeで検索すれば良いんじゃないのという所ですが・・・

hoge([0-9]+)

上記でhogeの次に0-9の1回以上の繰り返しにマッチします。

括弧で囲んだ部分は$1,$2,$3のような文字で置換の際にマッチした部分を取り出せます。

上記であれば数字の部分が置換の際に利用できます。
hogemoge$1等として置換したりできます。もしくは$1hogeとすれば反対にできますね。

pタグの中の文字をspanで囲む

下記でいけるかなと思います。

<p>((.|\r\n|\r|\n)+)</p>

等とするとpタグの中の文字列が取得できるかと思います。
1点気をつけたい所で、基本的に正規表現は1行毎に見ていくため、複数行にまたがるような検索を行いたい場合、
Dreamweaverでは「(.|\r\n|\r|\n)+」等として改行も含めた正規表現にしないといけません。

置換の際に下記のようにする事でspanで囲む事ができます。
$1が括弧でマッチした部分です。
因みに入れ子になっている場合には外側が$1で$2が中側です。

<p><span>$1</span></p>

さらに言うと(?:)というものもあって、これはマッチしたものを変数に格納しません。(下記の場合$2)は入らない

<p>((?:.|\r\n|\r|\n)+)</p>

似たような単語表現を検索したい

例えば、お問い合わせ 問い合わせ お問合せ
等の文字ゆれがあるかと思いますが、気づいた時にはどのページに何があるんだろう・・・なんて事もあるかと思いますが
下記のようにすれば全部ピックアップできそうでしょうか。

お?問い?合わ?せ

文字の後の?は0回か1回を意味しています。

また、ひらがなの時は考慮していないので、考慮すると下記でしょうか。

お?[問と]い?[合あ]わ?せ

といあわせ おといあわせにもマッチすると思います。

上記は何も考えていないので、もしかしたら関係のない文中の文字列等にマッチしてしまうかもしれません。

liタグから文字列だけ抜き出したい

整形とかしていると必要になるかも

<li[^>]+>(.+?)</li>

等とするとマッチするかと思います。
<liの次に>意外の文字が繰り返し>が来て、1回以上の文字を括弧に格納して</li>でマッチする文字列
※この場合も複数行にはマッチできないので上の方でも説明した「(.|\r\n|\r|\n)+」を利用すれば良いかなと思います。

置換で$1だけにしてあげれば中身だけの文字になります。
「選択したテキスト」を利用したりすると良いかもしれません。
DW正規表現3.fw

実際にはaタグ等もliタグ等に入っているかもしれませんので、状況に応じて正規表現を足していけば良いかなと思います。


さて簡単に書いていきましたが、正規表現が使えるだけで作業が捗りそうな気がしませんか?

あ、くれぐれも正規表現の置換は一発で行わないようにした方が良いですよ!
まずは検索して影響範囲を調べてからが良いです(汗

需要があればもっと踏み込んで書いていきたいと思っています。
かなりディープなので私もちゃんと把握できていない部分が多々あります(汗)。