【プログラム】正規表現 ~ 入門編 ~

■ はじめに

正規表現の基本的なことについて纏めておく

目次

【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