「正規表現 リファレンス」の版間の差分

提供:Wiki@KDS
ナビゲーションに移動 検索に移動
編集の要約なし
編集の要約なし
52行目: 52行目:
<tr>
<tr>
<td align="center">[^ ]</td>
<td align="center">[^ ]</td>
<td>指定された文字以外の文字にマッチ</td>
<td>指定された文字以外の文字にマッチ(否定)</td>
</tr>
</tr>
<tr>
<tr>

2008年8月6日 (水) 16:07時点における版


正規表現

「正規表現」とは、さまざまな文字列をメタキャラクタと呼ばれる記号を使って表現することをいいます。

■ 正規表現 リファレンスでよく出てくる語句

・メタキャラクタ(別名:メタ文字) ⇒ メタキャラクタとは、正規表現における特別な意味を持った記号のこと。
・マッチ ⇒ ある文字列が、正規表現によって定義される特定のパターンに一致(合致)すること。
・エスケープ ⇒ メタキャラクタ自体を文字としてマッチさせるために、メタキャラクタの前に「 \ 」を付けてメタキャラクタが持つ意味を無効化すること。


■ メタキャラクタ リファレンス


・メタキャラクタ 一覧表

正規表現の主なメタキャラクタの一覧表です。 ※各メタキャラクタの詳細については、後述の[解説]を参照してください。(一部、ないものもあります。)

メタキャラクタ 説明
. 任意の1文字にマッチ
\ メタキャラクタの持つ意味を無効化する
* 直前の正規表現と0回以上一致
^ 文字列の先頭にマッチ
$ 文字列の末尾にマッチ
[ ] 指定された文字の中のいずれかにマッチ
[^ ] 指定された文字以外の文字にマッチ(否定)
( ) 部分正規表現のグルーピング
(?: ) 部分正規表現のグルーピング(一時記憶なし)
| 左右の正規表現(または文字)のどちらかにマッチ
{ } 直前の正規表現と指定回数一致
+ 直前の正規表現と1回以上一致
? 直前の正規表現と0回または1回以上一致
\d 、 \D 任意の数字にマッチ / 数字以外の任意の1文字にマッチ
\s、\S 任意の空白文字にマッチ(タブ、改行も含む。全角空白は含まない) / 空白文字以外の任意の文字にマッチ
\w、\W アルファベットの大文字・小文字・数字・アンダースコア( _ )にマッチ / アルファベットの大文字・小文字・数字・アンダースコア( _ )以外の文字にマッチ
\r 復帰
\n 改行
\t 水平タブ
(?! ) 「?!」の右側に指定した正規表現(または文字)が存在しない場合にマッチ(否定の先読み)

・任意の一文字に一致

◆メタキャラクタ⇒ . (ドット)

[解説] 「.」は、あらゆる文字にマッチするメタキャラクタのこと。「.」1つで1文字を表す。

[文例1] 「光画デジタルサプライ」を正規表現でマッチさせる。
 文字列(例):光画デジタルサプライ

置換前の指定 ⇒ ........... (他にも、「光........イ」や「..デジタル....」としても可)


 ※「光画デジタルサプライ」は10文字なので、「.」を10個並べることでマッチさせることができる。

[文例2] 文字の「.」(ドット)自体も正規表現でマッチさせる。
 文字列(例):index.html

置換前の指定 ⇒ .....\.....


 ※「.」の前に「\」をつける(エスケープ)ことで「.」自体をマッチさせることができる。

・直前の正規表現と0回以上一致

◆メタキャラクタ⇒ * (アスタリスク)

[解説] 「*」は、「*」の直前に置かれた正規表現を0回以上繰り返すメタキャラクタのこと。

[文例] 「人気のラムカン・ダムールにタカシマヤ限定のローズピンクが新登場。」を正規表現でマッチさせる。
 文字列(例):人気のラムカン・ダムールにタカシマヤ限定のローズピンクが新登場。

置換前の指定 ⇒ .*


 ※「*」の前に「.」を付けることによって、不特定の文字列(任意の一文字を0回以上繰り替えす文字列)に一致させることができる。

・直前の正規表現と指定回数一致

◆メタキャラクタ⇒ { } (中カッコ)

[解説] 「 { } 」は、「 { } 」の直前に置かれた正規表現を指定回数繰り返すメタキャラクタのこと。「 { } 」の中には数字(指定回数)が入ります。

[文例] ある文字列の中で、複数回繰り返されている特定の文字を正規表現を使って一致させる。

 文字列(例):人気のラムカン・ダムールにタカシマヤタカシマヤ限定のローズピンクが新登場。
 特定の文字:タカシマヤタカシマヤ

置換前の指定 ⇒ (タカシマヤ){2}


・グループ化と一時記憶

◆メタキャラクタ⇒ ( ) (半角カッコ)

[解説] 「 ( 」と「 ) 」で囲われた部分をグループ化し、グループ化した内容を一時的に記憶させることができるメタキャラクタのこと。

[文例] 文字列から特定の文字を正規表現を使って抜き出す。

 文字列(例):人気のラムカン・ダムールにタカシマヤ限定のローズピンクが新登場。
 特定の文字:「タカシマヤ」と「ローズピンク」

置換前の指定 ⇒ .*(タカシマヤ).*(ローズピンク).*

置換後の指定 ⇒ $1$2

◎置換結果 ⇒ タカシマヤローズピンク


※グループ化された内容は、「$1」で表示させることが可能。「( )」の数によって$1、$2、$3...と増えていく。一時記憶させたくない場合は、「 ( 」を「 (?: 」とするとよい。

・文字列の先頭に一致

◆メタキャラクタ⇒ ^ (キャレット)

[解説] 文字列の先頭を表すメタキャラクタのこと。

[文例] 特定の文字から始まる文字列を、正規表現を使って一致させる。

 文字列(例):人気のラムカン・ダムールにタカシマヤ限定のローズピンクが新登場。
 特定の文字:人気のラムカン・ダムール

置換前の指定 ⇒ ^人気のラムカン・ダムール.*


・文字列の末尾に一致

◆メタキャラクタ⇒ $ (ドル)

[解説] 文字列の末尾を示すメタキャラクタのこと。文字ではなく位置にマッチする。

[文例] 末尾に特定の文字が付く文字列を、正規表現で一致させる

 文字列(例):人気のラムカン・ダムールにタカシマヤ限定のローズピンクが新登場。
 特定の文字:新登場。

置換前の指定 ⇒ .*新登場。$


・指定された文字のいずれかにマッチ

◆メタキャラクタ⇒ [ ] (大カッコ)

[解説] 「 [ 」と「 ] 」で囲われた文字の中のいずれかにマッチするメタキャラクタのこと。

[文例] 商品番号「232545」から「232549」までを正規表現で一致させる。

 文字列(例):232543,232544,232545,232546,232547,232548,232549,232550,232551,232552

置換前の指定 ⇒ 23254[5-9]


※「 [ ] 」の中に2つ数字を入れ、数字と数字の間に「 - (ハイフン)」を入れることで「例:[5-9]」は「5」または「6」または「7」または「8」または「9」という意味になる。


・指定された文字以外の文字にマッチ(否定)

◆メタキャラクタ⇒ [^ ] (大カッコ + キャレット)

[解説] 「 [ 」のすぐ後に「 ^ 」を入れることで、「 [ ] 」の中に指定した文字以外の文字にマッチすることができます。これを「否定」といいます。

[文例] 特定の文字以外の文字を正規表現で一致させる。

 文字列(例):人気のラムカン・ダムールにタカシマヤ限定のローズピンクが新登場。
 特定の文字:タカシマヤ限定

置換前の指定 ⇒ [^タカシマヤ限定]


※否定では、「 [ ] 」の中に記述されている文字の1文字ずつ(「タ」「カ」「シ」「マ」「ヤ」「限」「定」)を精査します。そのため、必ずしも連続した文字列のみにマッチするわけではありません。今回の例文の場合、「タカシマヤ限定」で使っているそれぞれの文字が他でも使われていると、その文字も否定される(マッチしない)ことになります。

・2つの正規表現のどちらかにマッチ

◆メタキャラクタ⇒ | (パイプ)

[解説] 正規表現(または文字)の選択を表すメタキャラクタのこと。「 | 」の両側に置かれた正規表現(または文字)のどちらかにマッチさせたい場合に使います。

[文例] 「たかしまや、タカシマヤ、髙島屋、takashimaya、TAKASHIMAYA」を「高島屋」に置換する。

置換前の指定 ⇒ たかしまや|タカシマヤ|髙島屋|takashimaya|TAKASHIMAYA

置換後の指定⇒ 高島屋


・任煮の数字に一致

◆メタキャラクタ⇒ \d (エンマーク + 半角小文字 d)

[解説] 0から9までの任意の数字1文字にマッチするメタキャラクタのこと。

[文例] ある文字列内にある6桁の数字を正規表現を使って一致させる。

 文字列(例):人気のラムカン・ダムールにタカシマヤ限定のローズピンク(商品番号:232551)が新登場。
 特定の文字:232551

置換前の指定 ⇒ \d{6} (「\d\d\d\d\d\d」でも可)


・各種の制御文字に一致

◆メタキャラクタ⇒ \r (エンマーク + 半角小文字 r)、 \n (エンマーク + 半角小文字 n)、 \t (エンマーク + 半角小文字 t)

[解説] 「\r」は復帰(CR)、「\n」は改行(LF)、「\t」は水平タブを表す。

[文例] ある複数の文字列から、水平タブと復帰、改行を取り除く。

 文字列(例):
【タカシマヤ限定ローズピンク】オーブンに使えて、サラダからデザートまで多彩に活躍します。
		一人前の前菜やサラダ、ソースや薬味、デザートなどの盛り付けにぴったりです。

置換前の指定 ⇒ \t|\r\n


※サクラエディタで改行に完全にマッチさせるには、「\r\n」とする必要があります。

・直前の正規表現と0回以上一致(最短一致)

◆メタキャラクタ⇒ *? (アスタリスク + クエスチョンマーク)

[解説] 「 *? 」は「 * 」と同じように直前の正規表現を0回以上繰り返すメタキャラクタです。しかし、「 *? 」は「 * 」と違い「できる限り短くマッチさせる」ように振舞います。逆に「 * 」は「できるかぎり長くマッチさせる」ように振舞います。

[文例] リンクのみを置換する。

 文字列(例):
<a href="/shopping/summergift/index.html"><img src="banner/main_bnr_s080730_summergift.jpg" width="272" height="87" ...(以下、略)

置換前の指定 ⇒ href="(.*?)"

置換後の指定 ⇒ href="http://www.takashimaya.co.jp$1"


※置換前の指定で「href="(.*)"」とした場合、href=""より後にも「 " 」が存在(例:src="")するため意図したようにマッチしません。「href="(.*)"」であれば、「 " 」の後で最初の「 " 」を発見した時点でマッチをやめます。


・否定の先読み

◆メタキャラクタ⇒ (?!正規表現) (半角カッコ + クエスチョンマーク + エクスクラメーションマーク + 正規表現(または文字) + 半角カッコ)

[解説] 「 (?!正規表現) 」とは、指定した「正規表現(または文字)」が存在しない場合にマッチするメタキャラクタのこと。

[文例] 「タカシマヤ限定」の文字が存在しない文字列を正規表現で一致させる。

 文字列(例):
人気のラムカン・ダムールにタカシマヤ限定のローズピンクが新登場。
一人前の前菜やサラダ、ソースや薬味、デザートなどの盛り付けにぴったりです。かわいいハート型は、小物入れにしても素敵です。

置換前の指定 ⇒ ^((?:(?!タカシマヤ限定).)*)\r\n


※一時記憶した内容は、$1で参照可能です。今回の場合は、「一人前の前菜や」から「素敵です。」までが一時記憶されています。







■ 目的別逆引き リファレンス