■ はじめに
正規表現の基本的なことについて纏めておく
目次
【1】予備知識 1)エスケープが必要な文字 【2】文法 1)括弧 "" 2)ハイフン "-" 3)ピリオド "." 4)プラス "+" 5)アスタリスク "*" 6)パイプ "|" 7)"\d" / "\w" / "\s" / "\S" 8)"?" / "*" 一致しているか 9)その他 【3】サンプル 1)整数 2)実数 3)日付 4)英数字、記号
【1】予備知識
1)エスケープが必要な文字
\ * + . ? { } ( ) [ ] ^ $ - | 上記の文字の前に「\」を付ける 詳細は以下を参照。
http://www.javadrive.jp/regex/ini/index4.html
【2】文法
1)括弧 ""
* 文字グループを表す
2)ハイフン "-"
* 「-」:From(~) => 括弧 "[]"の中で、ハイフン "-"を用いると、文字範囲を表す
例
* [0-9] = [0123456789] * [a-z] = [abcdefghijklmnopqrstuvwxyz] * [a-zA-Z] = 大文字・小文字のアルファベット * [0-9a-zA-Z] = 半角英数字 * [ぁ-ん] = 全ての全角ひらがな * [ァ-ン] = 全ての全角カタカナ
注意
* 「ハイフン(-)」を入力可能文字にしたい場合は、エスケープすること
3)ピリオド "."
* 改行文字以外の任意の一文字を表す
4)プラス "+"
* 直前の文字の1回以上の繰り返しを表す
5)アスタリスク "*"
* 直前の文字の0回以上の繰り返しを表す
例
* 「.*」 = 0文字以上の任意の文字列 * 「.+」 = 1文字以上の任意の文字列 詳細は以下を参照。
https://www.mlab.im.dendai.ac.jp/~yamada/java/regex/
6)パイプ "|"
* ORを表す
7)"\d" / "\w" / "\s" / "\S"
* "\d" : 数字(全角数字含む)を表す * "\w" : 単語に使用される任意の文字([a-zA-Z_0-9]。 英字、数字、アンダースコア('_')、全角ひらがな、全・半角カタカナ、漢字)を表す * "\s" : 空白文字を表す * "\S" : 空白以外の文字を表す 詳細は以下を参照。
http://msdn.microsoft.com/ja-jp/library/20bw873z%28VS.80%29.aspx
8)"?" / "*" 一致しているか
* 「?」:直前の文字と0回~1回、一致しているか => 例[ab?]:「a」または「ab」と一致しているか * 「*」:直前の文字と0回以上、一致しているか => 例[ab*]:「a」または「ab」、「abb」など一致しているか
http://www.cocoaliz.com/vb.net/index/16/
* 「+」:直前の文字と1回以上、一致しているか => 例[ab+]:「ab」、「abb」など一致しているか(「a」は不一致とみなされる) * 「{n}」:n回一致しているか => 例[0-9]{4}:半角数字が4回繰り返された(「0123」、「4567」など) * 「{n,m}」:n回~m回一致しているか => 例[0-9]{2,4}:半角数字が2~4回繰り返された(「01」、「4567」など)
9)その他
* 「^」:先頭(始点) => 例[^abcdef]:abcdef以外 ※ 「$」:終点
参考文献 http://sakura-editor.sourceforge.net/htmlhelp/HLP000089.html
【3】サンプル
* まず、感じをつかむための例を載せる
No | パターン | 概要 | 備考 |
---|---|---|---|
01 | [abc] | "abc"いずれかの文字 | "":文字グループを表す |
02 | [~abc] | "abc"以外の文字 | 「^」:XXX以外 |
03 | [a-zA-Z] | a~z又はA~Zの文字 | "-":文字範囲を表す |
04 | [0-9] | 0~9の数字 | |
05 | (ab | cd) | ab又はcd|「|」:ORを表す |
06 | A{n} | Aのn回以上連続 | "n":数字 |
07 | A+ | Aが一回以上連続 |
1)整数
例:5桁の正の整数
^[0-9]{1,5}$
http://park5.wakwak.com/~weblab/tipsSeikiHyogen1.html
2)実数
例:浮動小数点
^[-+]?[0-9]*\.?[0-9]+$
3)日付
例:YYYY/M/d形式かどうか
「2011/01/01」「2011/1/1」両方OK! \d{4}/\d{1,2}/\d{1,2}
4)英数字、記号
例:英数字および「-」、「*」を5桁まで
[a-zA-Z0-9\u002A\u002d]{0, 5}
例:英数字混合文字列
^[0-9]+[0-9a-zA-Z]*[a-zA-Z]+[0-9a-zA-Z]*$|^[a-zA-Z]+[0-9a-zA-Z]*[0-9]+[0-9a-zA-Z]*$
http://w-leo.way-nifty.com/blog/2005/12/post_41d4.html
5)その他
イベントログの代替え文字「%X」
* 「%X」(X:整数値。ただし、0が頭にならない整数。「%0」も除外) * \u0025[1-9]+[0-9]?
プログラム・バージョン「XX.XX.XX.XX.XX」
* 「XX.XX.XX.XX.XX」(X:0-9) ^[0-9]{1,2}\\.[0-9]{1,2}\\.[0-9]{1,2}\\.[0-9]{1,2}
参考文献
動画
http://dotinstall.com/lessons/basic_regexp
関連記事
正規表現 ~ Email ~
https://dk521123.hatenablog.com/entry/2024/10/02/000400
Java
正規表現 ~ 一致・不一致の判定 ~
https://dk521123.hatenablog.com/entry/2014/06/10/224404
正規表現 ~ 文字列の抽出 ~
https://dk521123.hatenablog.com/entry/2016/12/30/142128
正規表現 ~ 数字/文字の出現回数を数える ~
https://dk521123.hatenablog.com/entry/2016/10/19/004224_1
正規表現 ~ 不要文字除去 / 対象文字のみ抽出 ~
https://dk521123.hatenablog.com/entry/2017/01/19/213612
正規表現 ~ 複雑な文字列置き換え ~
https://dk521123.hatenablog.com/entry/2015/04/08/000052
Scala
Scala ~ 基本編 / 正規表現 ~
https://dk521123.hatenablog.com/entry/2023/03/18/034704
Python
Python ~ 基本編 / 正規表現 ~
https://dk521123.hatenablog.com/entry/2019/09/01/000000
Python ~ 基本編 / 正規表現あれこれ ~
https://dk521123.hatenablog.com/entry/2020/10/15/000000