正規表現
正規表現とは
例えば、毎年リリースされるiPhoneシリーズについて考える。一般的にiPhoneシリーズは「iPhone バージョン」で表されるが「iPhone 4S」や「iPhone X」など規則性が崩れることがある。 ここで、「iPhone NN Pro」(Nは整数)をデータから探すことを考える。このとき、データ入力者によっては”i”と”Phone”の後に半角スペースや全角スペースを入れる場合や”phone”の様に入力する場合もあり表記揺れが発生するかもしれない。 このとき有用になるのが正規表現を用いたパターンマッチングである。
iPhone NN Proを探す
- “i”と”Phone”の間には「0または1」の「半角スペースまたは全角スペース」を許容する
- 「“Phone”または”phone”」を許容する
- “Phone”と”NN”の間には「0または1」の「半角スペースまたは全角スペース」を許容する
- “Pro Max”シリーズは含まない
メタ文字
量化
メタ文字 | 意味 |
---|---|
? | 直前の表現が0or1 |
* | 直前の表現が0以上 |
+ | 直前の表現が1以上 |
{n,m} | 直前の表現がn以上、m以下 |
選言
グループ分け
位置の指定
メタ文字 | 意味 |
---|---|
^ | 行頭の位置 |
$ | 行末の位置 |
定義済みの正規表現
メタ文字 | 意味 |
---|---|
\t | タブ |
\r | 改行(Carriage Return) |
\n | 改行(Line Feed) |
\d | すべての数字 |
\D | すべての数字以外の文字 |
\s | 垂直タブ以外のすべての空白文字 |
\S | すべての非空白文字 |
\w | アルファベット、アンダーバー、数字 |
\W | アルファベット、アンダーバー、数字 |
任意の1文字にマッチ
指定した文字のどれか
先読みと後読み
肯定の先読み
否定の先読み
肯定の後読み
否定の後読み
iPhone NN Proの正規表現を定義する
“i”と”Phone”の間には「0または1」の「半角スペースまたは全角スペース」を許容する
「“Phone”または”phone”」を許容する
“Phone”と”NN”の間には「0または1」の「半角スペースまたは全角スペース」を許容する。
“Pro Max”シリーズは含まない
C#コード例
class IPhoneSeries
{
private static readonly Regex NNPRo = new Regex("i( | )?(P|p)hone( | )?[\\d]{2,2}( | )?Pro( | )?(?!Max)", RegexOptions.Compiled);
internal static bool IsNNPro(string iphone)
{
var match = NNPRo.Match(iphone);
return match.Length == iphone.Length;
}
}