🔅Tips
Dartで正規表現を使った例の紹介があるようで、自分の知りたいパターンがなかった。なので、作ってみた。文字、記号、数字に対応。
https://api.flutter.dev/flutter/dart-core/RegExp-class.html
https://flutter.salon/dart/regexp/
正規表現のチートシート
基本的なメタ文字
パターン |
説明 |
. |
任意の1文字 |
^ |
行の先頭 |
$ |
行の末尾 |
* |
直前の文字が0回以上繰り返される |
+ |
直前の文字が1回以上繰り返される |
? |
直前の文字が0回または1回繰り返される |
\ |
エスケープ文字(メタ文字を文字として扱う) |
文字クラス
パターン |
説明 |
[abc] |
a 、b 、c のいずれか1文字 |
[^abc] |
a 、b 、c 以外の任意の1文字 |
[a-z] |
小文字のアルファベット1文字 |
[A-Z] |
大文字のアルファベット1文字 |
[0-9] |
数字1文字 |
\d |
数字1文字([0-9] と同じ) |
\D |
数字以外の1文字([^0-9] と同じ) |
\w |
英数字またはアンダースコア1文字([a-zA-Z0-9_] と同じ) |
\W |
英数字またはアンダースコア以外の1文字([^a-zA-Z0-9_] と同じ) |
\s |
空白文字(スペース、タブ、改行など) |
\S |
空白文字以外の1文字 |
繰り返し
パターン |
説明 |
{n} |
直前の文字がちょうどn回繰り返される |
{n,} |
直前の文字がn回以上繰り返される |
{n,m} |
直前の文字がn回以上m回以下繰り返される |
グループ化と参照
パターン |
説明 |
(abc) |
abc のグループ |
(?:abc) |
非キャプチャグループ(後方参照しない) |
\1 , \2 , ... |
キャプチャグループの後方参照 |
位置指定子
パターン |
説明 |
\b |
単語の境界 |
\B |
単語の境界以外 |
例
パターン |
説明 |
^\d{3}-\d{4}$ |
郵便番号(例: 123-4567) |
^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$ |
メールアドレス |
\b\d{3}-\d{4}\b |
文中の郵便番号(例: "住所は123-4567です") |
正規表現の使用例
使用例 |
説明 |
str.replaceAll(RegExp('a'), '') |
特定の文字(例: a )を除外する |
RegExp(r'\d+').allMatches(str).map((m) => m.group(0)) |
数字のみを抽出する |
RegExp(r'[ァ-ヶー]+').allMatches(str).map((m) => m.group(0)) |
カタカナのみを抽出する |
RegExp(r'[ぁ-ん]+').allMatches(str).map((m) => m.group(0)) |
ひらがなのみを抽出する |
RegExp(r'[a-zA-Z]+').allMatches(str).map((m) => m.group(0)) |
アルファベットのみを抽出する |
RegExp(r'[A-Z]+').allMatches(str).map((m) => m.group(0)) |
大文字のみを抽出する |
RegExp(r'[a-z]+').allMatches(str).map((m) => m.group(0)) |
小文字のみを抽出する |
使用例のコード(Dart)
void main() {
String str1 = "apple banana grape";
String result1 = str1.replaceAll(RegExp('a'), '');
print(result1);
String str2 = "abc123def456";
Iterable<RegExpMatch> matches2 = RegExp(r'\d+').allMatches(str2);
List<String> result2 = matches2.map((m) => m.group(0)!).toList();
print(result2);
String str3 = "カタカナとひらがなと漢字";
Iterable<RegExpMatch> matches3 = RegExp(r'[ァ-ヶー]+').allMatches(str3);
List<String> result3 = matches3.map((m) => m.group(0)!).toList();
print(result3);
String str4 = "カタカナとひらがなと漢字";
Iterable<RegExpMatch> matches4 = RegExp(r'[ぁ-ん]+').allMatches(str4);
List<String> result4 = matches4.map((m) => m.group(0)!).toList();
print(result4);
String str5 = "abc123DEF456";
Iterable<RegExpMatch> matches5 = RegExp(r'[a-zA-Z]+').allMatches(str5);
List<String> result5 = matches5.map((m) => m.group(0)!).toList();
print(result5);
String str6 = "abcDEFghi";
Iterable<RegExpMatch> matches6 = RegExp(r'[A-Z]+').allMatches(str6);
List<String> result6 = matches6.map((m) => m.group(0)!).toList();
print(result6);
String str7 = "abcDEFghi";
Iterable<RegExpMatch> matches7 = RegExp(r'[a-z]+').allMatches(str7);
List<String> result7 = matches7.map((m) => m.group(0)!).toList();
print(result7);
}
Discussion