正規表現で全ての文書や内容を検索・置換する方法
正規表現とは、簡単に言うと「文字列をパターン形式で検索や置換を行う方法」です。
正規表現を使用すると文書内の全ての文字から、簡単に見つけたい文字列を探すことができます。
見つけたい文字列を探すための「メタ文字」が多数用意されていて、それらを組み合わせることにより、「aを含む文字列」「数字の文字列」「aを含まない文字列」といった様々な設定ができます。
正規表現を使用すると、以下のような複雑な文章も検索や置換が可能です。
「iphone6を購入したものの、近い時期にIPHONE7が発売されるようです。
それならば、IPHONE6を購入せずに、iphone 7の発売されるのをを待てばよかった。
」
上記のようなの文の中から、4つのiPhoneを正規表現で検索したい場合があります。
これを表現すると・・。
1 |
(iphone|IPHONE).?(6|7)< |
以上のような正規表現で検索することができます。少し難しいですが、繰り返し覚えることによって様々な場面で使用できるので便利です。
慣れると簡単に文章が検索や置換できるため、文章作成や構成、WEB制作などにおいても応用の可能です。
このページでは、正規表現の使い方や応用方法を詳しく解説していきます。
正規表現のメタ文字
正規表現とは、「文字列をパターン形式で検索や置換を行う方法」です。
パターン形式で使う正規表現にはメタ文字を使用します。
以下に記載されている文字がパターン形式を表現する上で重要なメタ文字です。記入の際は半角を使用します。
1 |
. ^ $ [ ] * + ? | ( ) |
これらの記号は正規表現では、「メタ文字」といいます。
「メタ」は、日本語で「超」という意味です。
正規表現の使い方はこのページでは省略しますが、以下のサイトでは詳しい使い方が説明されています。
十分に練習した上でしっかりと覚えてください。
全てを置換する方法
正規表現では文字列を置換することができますが、あらゆる全ての文字列や文章を置換するのは、どうすればいいかといった悩みにぶち当たることがあります。
中々検索しても出てこないのが現状ですが、今回はあらゆる文字列と文章を置換する方法を紹介します。
更にグローバル置換(複数のドキュメントを置換)を行えば、全てのページから全ての文章を選択して置換することができます。
以下のコードを正規表現で使用してください。
1 |
([\s\S]*?) |
これで複雑な文書や改行や誤字脱字、数字などがあっても、全てを検索置換することができます。
以下はサイト移転するときのXMLデータです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
AUTHOR: abc TITLE: こんにちわ STATUS: Publish ALLOW COMMENTS: 1 CONVERT BREAKS: default ALLOW PINGS: 1 PRIMARY CATEGORY: 未分類 CATEGORY: 未分類 DATE: 07/27/2009 21:28:55 ----- BODY: その日、大介は記憶がまったくなくなってしまった。愛の夢は不動の右サイドバックになることだった。<br /> ある日、大介は愛の携帯電話を偶然拾ってしまった。そして、大介の中に黒くて透き通った丸い塊が出来た。<br /> その後、、大介は夢のお告げ通り、富士山に行った。しかし、行っただけで登るのは止めた。 ----- EXTENDED BODY: ----- EXCERPT: ----- KEYWORDS: ----- -------- AUTHOR: abc TITLE: こんばんわ STATUS: Publish ALLOW COMMENTS: 1 CONVERT BREAKS: default ALLOW PINGS: 1 PRIMARY CATEGORY: 未分類 CATEGORY: 未分類 DATE: 07/28/2009 21:30:15 ----- BODY: 今日、大介は夢を諦めかけていた。愛はここ最近、ツンドラ気候のことで頭が一杯だった。<br /> ある時、愛が全裸で寝そべっていた。それで、大介はそれをずっと前から知っている、懐かしいもののように感じていた。<br /> それから、大介はやがて考えるのを・・・辞めた・・・。 ----- EXTENDED BODY: ----- EXCERPT: ----- KEYWORDS: ----- -------- |
XMLデータに含まれる文書内容を全て検索置換したい場合は以下のように記載します。
検索
1 2 3 4 |
BODY: ([\s\S]*?) ----- EXTENDED BODY: |
置換
1 2 3 |
BODY: ----- EXTENDED BODY: |
どうでしょうか、上手く使用すれば複数のファイルにまたがる文書から要らない内容を削ぎ落としたり、追加したりということがいとも簡単に行えます。
ちなみに上記のコードはブラウザ上では、([\s\S]*?)の半角の¥数字は表示できずに半角\と表示されています。
クリップボードにコピーして、使用したい部分に貼り付けると、半角\が半角の¥に変わります。
また、注意点としては、([\s\S]*?)単独では使用することができません。
必ず、上下に何か文字を与える必要があります。
先程の例で言うと、上には「BODY:」が与えられて、下には「—–
EXTENDED BODY:」を与えて、検索置換しています。
まとめ
この方法を使用することによって、複数のファイルにまたがる要らない文字列が一括で削除することができました。
例えば、WEBサイトを運営しているときに、複数のファイルの複雑な文字列を一括で変えたい場合が出てきます。こういった場合に全置換できる正規表現が威力を発揮します。
検索や置換の効率が上がるため、機会があれば是非使用してください。