ド素人がWikipediaを読んで、学び始める前の曖昧なきっかけをつかむかもしれない程度。
正規表現とは、ギョーカイ用語で文字列の省略表記とこの解釈、ということのようで。
Basic Regular Expression
grepやsedなどの、UNIXのユーティリティのデフォルトらしい。
リテラルとメタ
リテラルは見たそのまま 文字は文字 文字以外の機能を示さない扱い
メタは何らかの機能を意味する 言葉としては高次の(ナニナニ) 他の文字のための何らかの別の意味を持つ
. 任意の一文字
.at hat、cat、bat
[ ] 括弧内に含まれる一文字
[abc] a、b、c
[hc]at hat、cat
- 括弧内の最初か最後にあるときはリテラル
そうでないときはメタ
リテラル扱い
[abc-] a、b 、c 、-
[-abc] 同じ
メタ扱い
[a-z] 全ての小文字
[abcq-z] a、b、c、q、r、s、t、u、v、w、x、y、z
[a-cq-z] 同様
尚 [ の記号そのもの、]の記号そのものについては、囲んでいる括弧内で [ 記号、 ] 記号を先に書く。
[][ab] と書けば ]の記号、[の記号、a、b の4つの文字のうち1文字
敢えて不正確に書くなら [ ],[,a,b, ] ということ
[^ ] 括弧内に含まれない一文字
[^abc] a、b、c 以外の任意の一文字
[^b]at bat 以外の .at でマッチする全ての文字列
[^a-z] 小文字以外の任意の一文字
混用可能
^ 行の最初にマッチ
$ 行の最後にマッチ
^[hc]at 行の冒頭である場合のみ hat と cat にマッチ
[hc]at$ 行の末尾である場合のみ hat と cat にマッチ
\( \) 後に呼び出し重複利用するための記号
\n 1から9までの数をメタとして利用
\( \) で囲まれた部分の0回以上の繰り返し
独自解釈: 0回ではそもそも書く意味がないので実質1回以上、ただし無視してもいい、ということか!?
* 直前の文字を0回以上の繰り返し
[]と組み合わせると複雑な表現に
[xyz]* x、y、zx、zyx ・・・など
さらにこれらを組み合わせると
\(a.\)c\1* abcab、abcabab ・・・様々な可能性がある一方で abcac ではない
これを1文字ずつ改行して並べると
1文字目はa
2文字目は.なので任意の一文字
3文字目はc
そして4文字目に相当する正規表現は\1なので
a.を1回繰り返す
必然的に4文字目のみならず5文字目を記述することになる
6文字目は*
これは直前の文字の繰り返しだが
*の直前の文字に相当する正規表現は\1なので
a. の0回以上の繰り返しになる
尚、\(* と \)* という表現がもしあったとしても、*は無効。
POSIX
0 件のコメント:
コメントを投稿