正規表現(TRegExでマッチ,置換)の使い方 ~Delphiソースコード集
TRegExを使うとDelphiで正規表現を扱うことができます。
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回以下の繰り返し(最短一致) |
|
^(?!.*文字列).*$ | 文字列を含まない |
|