正規表現
- 6. 正規表現 6
何が便利なのか(その何が便利なのか(その 22 ))
● ログファイルから IP アドレスを見つけたい
– 1.0.0.1 から 255.255.255.254 まで
– 4294967296 通り
– そこで正規表現です
– '[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}'
– 正確には IP アドレスではないものもマッチする
- 8. 正規表現 8
正規表現の種類正規表現の種類
● 基本正規表現 (Basic Regular Expression)
– sed 、 grep 、 tr などで利用可
● unix の初期から利用されている正規表現
● 拡張正規表現 (Extended Regular Expression)
– awk 、 egrep (grep -E) などで利用可
● よりモダンな実装で機能が拡張されている
● その他
– perl 、 php 、 ruby などの言語で独自拡張されている
- 15. 正規表現 15
基本正規表現のメタキャラクタ基本正規表現のメタキャラクタ 77
● :alnum: アルファベットと10進数字
● :alpha: アルファベット
● :blank: 空白文字(タブ、スペース)
● :cntrl: 制御文字
● :digit: 10進数字
● :graph: 印字可能で表示可能な文字
● :lower: アルファベット小文字
● :print: 印字可能文字
● :punct: 句読点
● :space: 空白文字(タブ、スペース、改ページ)
● :upper: アルファベット大文字
● :xdigit: 16進数字
- 18. 正規表現 18
globglob との相違との相違
● シェルの glob とは異なる
– shell で利用する * や ? とは挙動が異なる
● * あらゆる文字列(空白を含む)にマッチ
(正規表現だと .* に近い)
● ? 1 文字にマッチ
(正規表現だと . に近い)
- 19. 正規表現 19
色々な正規表現色々な正規表現 11
●
usp
– 文字列 usp にマッチ
●
[Uu][Ss][Pp]
– 大文字小文字を区別しないで usp にマッチ
● u[ps][sp]
– 文字列 usp か ups にマッチ
– 文字列 uss や upp にもマッチ
●
u(sp|ps)
– 文字列 usp か ups にマッチ
- 21. 正規表現 21
色々な正規表現色々な正規表現 33
● ([A-Za-z]{3})([0-9]{2}).*21
– usp03To03usp 、 Abc98%$98Abc などにマッチ
● 英字 3 文字数字 2 文字任意の 2 文字数字 2 文字英字 3 文字
● ^[A-Za-z_][A-Za-z0-9_]*
– i 、 counter 、 LoopNum 、 _tpl 、 f1 、 f2 などにマッ
チ
- 22. 正規表現 22
色々な正規表現色々な正規表現 44
● [0-9]{3}-[0-9]{4}
– 123-4567 などにマッチ(郵便番号)
● [0-9]{1,3}
– 1 、 22 、 333 など 3 桁以内の数字にマッチ
● [a-z]{5,}
– abcde 、 rstuvwxyz など 5 文字以上の英小文字にマッチ
- 24. 正規表現 24
色々な正規表現色々な正規表現 66
● IPv4 アドレスにマッチ
– ([0-9]{1,3}.){3}[0-9]{1,3}
● 999.999.999.999 などにもマッチ
– (([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]).){3}([1-9]?[0-9]|1[0-
9]{2}|2[0-4][0-9]|25[0-5])
- 25. 正規表現 25
色々な(ry色々な(ry
● URLにマッチ
– https?:(//(([-.0-9_a-z~]|%[0-9a-f][0-9a-f]|[!$&-,:;=])*@)?([(([0-9a-f]{1,4}:){6}([0-9a-f]{1,4}:[0-9a-f]{1,4}|([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]).([0-9]|[1-9][0-9]|1[0-9]{2}|
2[0-4][0-9]|25[0-5]).([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]).([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]))|::([0-9a-f]{1,4}:){5}([0-9a-f]{1,4}:[0-9a-f]{1,4}|([0-9]|[1-9][0-9]|
1[0-9]{2}|2[0-4][0-9]|25[0-5]).([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]).([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]).([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]))|([0-9a-f]
{1,4})?::([0-9a-f]{1,4}:){4}([0-9a-f]{1,4}:[0-9a-f]{1,4}|([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]).([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]).([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4]
[0-9]|25[0-5]).([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]))|(([0-9a-f]{1,4}:)?[0-9a-f]{1,4})?::([0-9a-f]{1,4}:){3}([0-9a-f]{1,4}:[0-9a-f]{1,4}|([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|
25[0-5]).([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]).([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]).([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]))|(([0-9a-f]{1,4}:){0,2}[0-9a-f]
{1,4})?::([0-9a-f]{1,4}:){2}([0-9a-f]{1,4}:[0-9a-f]{1,4}|([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]).([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]).([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4]
[0-9]|25[0-5]).([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]))|(([0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:([0-9a-f]{1,4}:[0-9a-f]{1,4}|([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|
25[0-5]).([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]).([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]).([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]))|(([0-9a-f]{1,4}:){0,4}[0-9a-f]
{1,4})?::([0-9a-f]{1,4}:[0-9a-f]{1,4}|([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]).([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]).([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]).([0-
9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]))|(([0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(([0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::|v[0-9a-f]+.[!$&-.0-;=_a-z~]+)]|([0-9]|[1-9][0-9]|
1[0-9]{2}|2[0-4][0-9]|25[0-5]).([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]).([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]).([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])|([-.0-9_a-
z~]|%[0-9a-f][0-9a-f]|[!$&-,;=])*)(:[0-9]*)?(/([-.0-9_a-z~]|%[0-9a-f][0-9a-f]|[!$&-,:;=@])*)*|/(([-.0-9_a-z~]|%[0-9a-f][0-9a-f]|[!$&-,:;=@])+(/([-.0-9_a-z~]|%[0-9a-f][0-9a-f]|[!
$&-,:;=@])*)*)?|([-.0-9_a-z~]|%[0-9a-f][0-9a-f]|[!$&-,:;=@])+(/([-.0-9_a-z~]|%[0-9a-f][0-9a-f]|[!$&-,:;=@])*)*)?(?([-.0-9_a-z~]|%[0-9a-f][0-9a-f]|[!$&-,/:;=?@])*)?(#([-.0-9_a-z~]|
%[0-9a-f][0-9a-f]|[!$&-,/:;=?@])*)?
– https?(://[-_.!~*'()a-zA-Z0-9;/?:@&=+$,%#]+)
(URIの正規表現 http://sinya8282.sakura.ne.jp/?p=10640 より)
- 26. 正規表現 26
色々な(ry その色々な(ry その 22
● メイルアドレスにマッチ
– (?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:
[x01-x08x0bx0cx0e-x1fx21x23-x5bx5d-x7f]|[x01-x09x0bx0cx0e-x7f])*")@(?:(?:[a-
z0-9](?:[a-z0-9-]*[a-z0-9])?.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-
9][0-9]?).){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:
[x01-x08x0bx0cx0e-x1fx21-x5ax53-x7f]|[x01-x09x0bx0cx0e-x7f])+)])
– .+@.+..+
(Email Address Regular Expression That 99.99% Works.
http://emailregex.com/ より)