正規表現は、テキストのパターンを検索するための簡潔で応用範囲の広い表記法です。
正規表現には、次に示す3つの記法がある。
-E
を指定する。次に示すメタ文字を除いて、文字はリテラルとして扱われる。つまり、a
はそのまま文字「a
」を表す。
\
\.*
)の前に付けると、普通の文字として扱います。^
$
.
[expr]
[^expr]
*
+
\(expr\)
\n
正規表現 .
は、文字 .
や a
にマッチする。
正規表現 \.
は、文字 .
にマッチするが、文字 a
にはマッチしない。
正規表現 [ab]
は、文字 a
や b
にマッチするが、文字 c
や A
にはマッチしない。
正規表現 [ab]x
は、文字列 ax
と bx
にマッチするが、文字列 cx
や ab
にはマッチしない。
正規表現 [0-9]+
は、文字列 0
や 256
にマッチする。
正規表現 [a-z][a-z]+
は、文字列 aa
や bbb
にマッチするが、文字列 c
にはマッチしない。
正規表現 [a-z][a-z]*
は、文字列 bbb
や c
にマッチする。
正規表現 0x[0-9a-fA-F]+
は、文字列 0x80
や 0x01ef44EC
にマッチする。
正規表現 [a-zA-Z][0-9a-zA-Z]*
は、文字列 a
や Z80A
にマッチするが、文字列 2x
にはマッチしない。
正規表現 ^abc
は、「abc def
」という行の文字列 abc
にマッチするが、「def abc
」という行の文字列 abc
にはマッチしない。
正規表現 abc$
は、「def abc
」という行の文字列 abc
にマッチするが、「abc def
」という行の文字列 abc
にはマッチしない。
拡張正規表現におけるメタ文字は、一部を除いて基本正規表現のメタ文字と同じである。基本正規表現のメタ文字とは異なる点を次表に示す。
メタ文字 | 説明 |
---|---|
(expr) | exprを部分式としてマークする。 |
正規表現を利用して、最初の1文字がアンダーバー以外である環境変数を表示させる例を示します。
$ env | grep ^[^_]
部分式をマークして参照する例を示す。
$ cat input.txt
foo-bar
bar-baz
foo-
-bar
$ sed "s/\(...\)-\(...\)/\2-\1/" input.txt
bar-foo
baz-bar
foo-
-bar
メタ文字 | 説明 |
---|---|
\d | 数字1文字。[0-9]と同じ。 |
^ | 文字列の先頭。[]内で使った場合、[]内以外の文字。 |
$ | 行末 |
- | []内で範囲を表す。 |
\ | 直後の文字をエスケープする(メタ文字をリテラルとしてマッチさせる)。 |
. | 改行文字を除く任意の1文字。 |
[] | []の任意の1文字。 |
\D | 数字以外の1文字。[^0-9]と同じ。 |
\w | アルファベット又は数字(単語)。[a-zA-Z_0-9] と同じ。 |
\W | アルファベットと数字以外の1文字。[^a-zA-Z_0-9] と同じ。 |
\s | 空白文字、タブ文字又は改行文字。[\n\r\f\t] |
\S | 空白文字、タブ文字及び改行文字以外。[^\n\r\f\t] |
pattern1 | pattern2 | 論理和(OR)。pattern1又はpattern2のいずれかにマッチ。 |
(string) | 文字列をグループ化 |
量指定子とは、その直前の要素が連続していくつ続くかを指定する正規表現である。
メタ文字 | 説明 |
---|---|
? | 直前の要素が0個か1個 |
* | 直前の要素が0個以上 |
+ | 直前の要素が1個以上 |
{ m , } | 直前の要素がm個以上 |
{, n } | 直前の要素がn個以下 |
{m,n} | 直前の要素がm個以上n個以下 |
たとえば、正規表現「
(abc)+
」は文字列「
abc
」、「
abcabc
」及び「
abcabcabc
」などにマッチする。
さまざまなものをPerlの正規表現で表した例を示す。
[\w-]+(\.[\w-]+)+
[A-Z_a-z][0-9A-Z_a-z]*
https?:[\w/#%\.\-\?]+
^[\w\.\-]+@[\w\.\-]+