Delphiで正規表現を使う方法|TRegExでマッチ・置換・抽出を実例付きで解説
Delphiで正規表現を扱うには、System.RegularExpressionsユニットのTRegExを使うのが一般的です。
このページでは、文字列のマッチ・抽出・置換といった基本操作を、実例コードとともに丁寧に解説します。
また、よく使うメタ文字やオプションの意味も一覧表で整理しているため、逆引きリファレンスとしても活用できます。
TRegExを使うには
uses System.RegularExpressions;
が必要です。
大文字小文字を区別しないで正規表現にマッチ(一致)するか調べる
'delphi'の文字列が、大文字小文字を区別しない正規表現'[A-Z]'にマッチするかどうかを調べる。
uses System.RegularExpressions; procedure TForm1.Button1Click(Sender: TObject); var opt:TRegExOptions; begin //大文字小文字を区別しないオプションを設定する opt:=[roSingleLine,roIgnoreCase]; if TRegEx.IsMatch('delphi','[A-Z]',opt) then Memo1.Lines.Add('マッチする') else Memo1.Lines.Add('マッチしない') end;
「マッチする」が出力される
大文字小文字を区別して正規表現にマッチ(一致)するか調べる
'delphi'の文字列が、大文字小文字を区別する正規表現'[A-Z]'にマッチするかどうかを調べる。
uses System.RegularExpressions; procedure TForm1.Button2Click(Sender: TObject); var opt:TRegExOptions; begin //大文字小文字を区別する opt:=[roSingleLine]; if TRegEx.IsMatch('delphi','[A-Z]',opt) then Memo1.Lines.Add('マッチする') else Memo1.Lines.Add('マッチしない'); end;
「マッチしない」が出力される
正規表現にマッチ(一致)した箇所の文字列を出力する
'<p>あ</p><a>い</a><p>う</p><a>えお</a>'の文字列が、 正規表現'<p>.*?</p>'にマッチした箇所の文字列を出力する。
uses System.RegularExpressions; procedure TForm1.Button3Click(Sender: TObject); var opt:TRegExOptions; mm:TMatchCollection; m:TMatch; begin //大文字小文字を区別しないオプションを設定する opt:=[roSingleLine,roIgnoreCase]; mm:=TRegEx.Matches( '<p>あ</p><a>い</a><p>う</p><a>えお</a>', '<p>.*?</p>', opt ); for m in mm do Memo1.Lines.Add(m.Value); end;
「<p>あ</p>
<p>う</p>」
が出力される
正規表現にマッチ(一致)した箇所の丸括弧を使ったグループの文字列を出力する
'<p>あ</p><a>い<br>うえ</a><p>おか</p><a>きくけ<br>こ</a>'の文字列が、 正規表現'<a>(.*?)<br>(.*?)</a>'にマッチした箇所のグループの文字列を出力する。
uses System.RegularExpressions; procedure TForm1.Button4Click(Sender: TObject); var opt:TRegExOptions; mm:TMatchCollection; m:TMatch; i:integer; begin //大文字小文字を区別しないオプションを設定する opt:=[roSingleLine,roIgnoreCase]; mm:=TRegEx.Matches( '<p>あ</p><a>い<br>うえ</a><p>おか</p><a>きくけ<br>こ</a>', '<a>(.*?)<br>(.*?)</a>', opt ); for m in mm do for i:=1 to m.Groups.Count-1 do Memo1.Lines.Add(m.Groups.Item[i].Value); end;
「い
うえ
きくけ
こ」
が出力される
正規表現にマッチ(一致)した文字列を置換する
文字列 '<p>あ</p><a>い</a><p>う</p>' の 正規表現'<.*?>'にマッチした箇所を''(何もない文字列)に置換する(削除する)。
uses System.RegularExpressions; procedure TForm1.Button5Click(Sender: TObject); var opt:TRegExOptions; begin opt:=[roSingleLine]; Memo1.Lines.Add( TRegEx.Replace( '<p>あ</p><a>い</a><p>う</p>', '<.*?>', '', opt ) ); end;
「あいう」が出力される
主な正規表現一覧
| メタ文字 | 意味 | 備考 |
|---|---|---|
| ^ | 先頭にマッチ |
|
| $ | 最後にマッチ |
|
| . | 任意の1文字 |
|
| * | 直前のパターンの0回以上繰り返し(最長一致) |
|
| *? | 直前のパターンの0回以上繰り返し(最短一致) |
|
| + | 直前のパターンの1回以上繰り返し(最長一致) |
|
| +? | 直前のパターンの1回以上繰り返し(最短一致) |
|
| ? | 直前のパターンの0~1回繰り返し(最長一致) |
|
| ?? | 直前のパターンの0~1回繰り返し(最短一致) |
|
| | | 又は |
|
| [] | []内の文字何れか |
[abc]は文字「abc」の何れか [a-z]は文字「aからz」までの何れか [c-g]は文字「cdefg」の何れか [A-Z]は文字「AからZ」までの何れか [0-9]は文字「0から9」までの何れか [a-zA-Z0-9]は文字「aからz」「AからZ」「0から9」までの何れか [ぁ-ん]は「ひらがな」の何れか [ァ-ヴ]は「カタカナ」の何れか [ヲ-゚]は「半角カタカナ」の何れか
|
| [^] | []内に含まれない文字の何れか |
|
| \n | ラインフィーダ(LF) Linuxでの改行文字 |
|
| \r | キャリッジリターン(CR) |
|
| \文字 | \(バックスラッシュ)の直後の文字をエスケープする |
|
| \t | タブ(0x09) |
|
| \s | 半角スペース、\t、\n、\r、\f の何れか |
|
| \S | 半角スペース、\t、\n、\r、\f 以外 |
|
| \d | 半角数字 [0-9]と同じ |
|
| \D | 半角数字以外の文字 [^0-9]と同じ |
|
| \w | 半角英数字とアンダースコア(_) |
|
| \W | 半角英数字とアンダースコア(_)以外の文字 |
|
| {num} | 直前パターンのnum回繰り返し |
|
| {min,} | 直前パターンのmin回以上の繰り返し(最長一致) |
|
| {min,}? | 直前パターンのmin回以上の繰り返し(最短一致) |
|
| {min,max} | 直前パターンのmin回以上、max回以下の繰り返し(最長一致) |
|
| {min,max}? | 直前パターンのmin回以上、max回以下の繰り返し(最短一致) |
|
| ^(?!.*文字列).*$ | 文字列を含まない |
|
