正規表現とは?
状態:-
閲覧数:2,092
投稿日:2018-03-11
更新日:2018-07-01
表記
平仮名
・せいきひょうげん
英語
・regular expression
数学者 Stephan Cole Kleene
数学者 Stephan Cole Kleene が、「正規集合 regular sets」という代数によって、神経回路の論理モデルを有限オートマトンという数学的形式的に記述する表記法を考えたことに始まる
「文字列の集合」を「一つの文字列で表現する方法」の一つ
「文字列内」で「文字の組み合わせを照合する」ために用いられるパターン
・「文字列をパターン化」し、特殊な文字(メタキャラクタ、メタ文字)で表現したもの
・アプリケーションやプログラミングにおいて正規表現を用いた文字列のパターンマッチングを行う機能のこと
コマンド / 言語 / ソフトウェアによって仕様および実装が異なる
正規表現の仕様は、OS単位で決定するものではない
・「CentOS7の正規表現仕様」などというものは存在しない
「仕様および実装」は完全同一ではないが全く異なるわけでもない
最初に / 最終的には / 分類一覧
最初に
正規表現に共通した仕様は存在しない
・そのため真に正しい用語も存在しない
・分類や用語を、一字一句まで合わせることは不可能
最終的には
各「コマンド / 言語 / ソフトウェア」の公式ドキュメントを確認すべき
・全ての「コマンド / 言語 / ソフトウェア」に共通の正規表現公式ページは存在しない
分類一覧
メタキャラクタ
・(その記号自身とは異なる)特別な意味や役割が与えられている文字(記号)
制御文字を表現するメタキャラクタ
・改行文字、タブ文字など
文字クラス エスケープ
・正規表現で特別な意味を持つ文字(記号)を、通常の文字列として認識させる場合はエスケープが必要
量指定子(繰り返しを表すメタキャラクタの総称)
・n回以上の繰り返しなど
アンカー(正規表現がマッチする位置を固定するために用いるメタキャラクタの総称)
・行頭、行末など
グループ化構成体(部分正規表現のグルーピング)
・「 ( 」と「 ) 」で括ることにより、正規表現を単一の塊にする
・ 塊にしたものを部分正規表現と呼ぶ
修飾子
・マッチングの処理方法を変更する指定オプション
・末尾に付ける修飾子をフラグ(flag)と呼ぶ
Link
正規表現の分類
・正規表現あれこれ
・正規表現の文字クラスについて
・正規表現リファレンス
書籍
・正規表現辞典 改訂新版 (DESKTOP REFERENCE)
・正規表現辞典 改訂新版(佐藤竜一)
UNIXコマンドにおける正規表現比較
・どのUNIXコマンドでも使える正規表現
・正規表現
・正規表現メモ
・moreの仕様について
用語の違いLink
一覧
- | PHP |
---|---|
メタキャラクタ | メタ文字 |
文字を表現するメタキャラクタ | 包括的な文字型 |
制御文字を表現するメタキャラクタ | 非表示文字〔制御コードなど〕 |
繰り返しを表現するメタキャラクタ(量指定子) | 量指定子 |
位置を表現するメタキャラクタ(アンカー) | アンカー |
文字クラス | 文字クラス |
グループ化構成体 | サブパターン |
修飾子 | パターン修飾子 |
正規表現の種類(歴史)
POSIX
Portable Operating System Interface
・オペレーティングシステム (OS) 間での移植性を確保するために、1986年に発表された広範囲にわたる標準規格
・あくまでもUNIXにおける標準。それ以外に何らかの影響を与えるものではない
※POSIXによる標準化の範囲外の処理系では、POSIXに定義されている正規表現よりもっと強力な正規表現が利用可能
POSIX準拠プログラム
・下記何れかをサポートする
正規表現を2つに分類
・基本正規表現
・拡張正規表現(ERE)
基本正規表現(BRE / Basic Regular Expressions)
・sed、grep、vi、ed
拡張正規表現(ERE / extended regular expression)
・「拡張」という名前がついているが、基本正規表現の完全な上位互換ではない
・awk、egrep
Perl
汎用スクリプト言語として初めて
・正規表現を演算子として持っていた
・正規表現はPerlによって多くのプログラマに広められた
Perl1
・1987年12月リリース
・正規表現エンジンとして、「Larry Wall」が以前作成していたニュースリーダー rnのコードを借用していた
Perl2
・1988年6月リリース
・以前の正規表現パッケージを削除
・Henry Spencer のパッケージを大幅に拡張したバージョンを使用
Perl3
・1989年10月リリース
・「/e修飾子」を追加
Per4
・1991年3月リリース
・文字クラス内で\Dなどを使用できるようになった
Perl5
・1994年10月リリース
・先読み機能などを追加
"Perl互換"の正規表現パッケージが幾つも作成された
・しかし、それぞれの言語で導入された正規表現はあくまでも「Perlっぽい」ものであり、完全なPerlの正規表現ではなかった。互換性の程度は様々だった
PCRE
Perl Compatible Regular Expressions
・Perl 5 互換の正規表現をC言語で実装したライブラリ
・Perlの正規表現と互換性のある正規表現を他の言語でも実現するために作られたライブラリ
・多くのプログラミング言語やツールがPCREを採用
1997年
・Philip HazelがC言語で書いた正規表現パッケージを開発
Grep
Grep
Global search for Regular Expression and Print
・grep, egrep, fgrep - パターンにマッチする行を表示する
1973年
・Ken Thompson(ケン・トンプソン)が、edの正規表現検索機能を単独のプログラムに切り出してUnixに搭載
※現在では、複数の実装が存在する
Grep - GNU Project
GNU Grep 3.0
1988年
・最初のバージョンをリリース
・grepを訪ねて
GNU grep 2.20
2014年6月3日リリース
CentOS7
$ grep --version
grep (GNU grep) 2.20
Copyright (C) 2014 Free Software Foundation, Inc.
ライセンス GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
作者 Mike Haertel および その他の方々は <http://git.sv.gnu.org/cgit/grep.git/tree/AUTHORS> を参照してください。
$ info grep
File: grep.info-t, Node: Top, Next: Introduction, Up: (dir)
grep
****
`grep' prints lines that contain a match for a pattern.
This manual is for version 2.20 of GNU Grep.
This manual is for `grep', a pattern matching engine.
Copyright (C) 1999-2002, 2005, 2008-2014 Free Software Foundation,
Inc.
GNU grep 2.6.3
2010年リリース
CentOS7における man grep 日本語
$ man grep
GREP(1) General Commands Manual GREP(1)
名前
grep, egrep, fgrep - パターンにマッチする行を表示する
書式
grep [OPTIONS] PATTERN [FILE...]
grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]
説明
grep は FILE で名前を指定されたファイル (ファイルが指定されていない場合や、 ファイル名の代わりに 1
個のマイナス記号 (-) が指定されている場合は標準入力) を検索して、与えられた PATTERN
にマッチする部分を含む行を探します。 デフォルトでは、 grep はマッチした行を表示します。
さらに、2 つの兄弟プログラム egrep と fgrep が利用可能です。 egrep は grep -E と同じです。 fgrep は
grep -F と同じです。 egrep や fgrep を直接その名前で呼び出すのは、お勧めできません。
それが可能になっているのは、こうしたコマンドの存在を前提とする
昔のアプリケーションが、プログラムを修正しないでも 動くようにするためなのです。
オプション
プログラムについての一般情報
--help 以下に述べるコマンドラインオプションについて簡潔にまとめた使用法と、
バグレポートのためのアドレスを表示して、終了します。
-V, --version
grep のバージョン番号を標準出力に表示します。バグレポート には、必ずこの番号を付記してください
(下記参照)。
正規表現の選択
-E, --extended-regexp
PATTERN を拡張正規表現 (ERE) として扱います (下記参照)。 (-E オプションは POSIX
で規定されています)
-F, --fixed-strings
PATTERN を改行で区切られた固定文字列 (訳注: すなわち、正規表現ではない ただの文字列)
のリストとして扱い、 その文字列のどれかとマッチするかを調べます。 (-F オプションは POSIX
で規定されています)
Manual page grep(1) line 1 (press h for help or q to quit)...skipping...
GREP(1) General Commands Manual GREP(1)
名前
grep, egrep, fgrep - パターンにマッチする行を表示する
書式
grep [OPTIONS] PATTERN [FILE...]
grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]
説明
grep は FILE で名前を指定されたファイル (ファイルが指定されていない場合や、 ファイル名の代わりに 1
個のマイナス記号 (-) が指定されている場合は標準入力) を検索して、与えられた PATTERN
にマッチする部分を含む行を探します。 デフォルトでは、 grep はマッチした行を表示します。
さらに、2 つの兄弟プログラム egrep と fgrep が利用可能です。 egrep は grep -E と同じです。 fgrep は
grep -F と同じです。 egrep や fgrep を直接その名前で呼び出すのは、お勧めできません。
それが可能になっているのは、こうしたコマンドの存在を前提とする
昔のアプリケーションが、プログラムを修正しないでも 動くようにするためなのです。
オプション
プログラムについての一般情報
--help 以下に述べるコマンドラインオプションについて簡潔にまとめた使用法と、
バグレポートのためのアドレスを表示して、終了します。
-V, --version
grep のバージョン番号を標準出力に表示します。バグレポート には、必ずこの番号を付記してください
(下記参照)。
正規表現の選択
-E, --extended-regexp
PATTERN を拡張正規表現 (ERE) として扱います (下記参照)。 (-E オプションは POSIX
で規定されています)
-F, --fixed-strings
PATTERN を改行で区切られた固定文字列 (訳注: すなわち、正規表現ではない ただの文字列)
のリストとして扱い、 その文字列のどれかとマッチするかを調べます。 (-F オプションは POSIX
で規定されています)
-G, --basic-regexp
PATTERN を基本正規表現 (BRE) として扱います (下記参照)。これがデフォルトです。
-P, --perl-regexp
PATTERN を Perl の正規表現として扱います。 きわめて実験的なものなので、 grep -P
を使うと、その機能は実装されていませんという 警告が出るかもしれません。
マッチングの制御
-e PATTERN, --regexp=PATTERN
PATTERN をパターンとして指定します。 このオプションを使用すれば、多数の検索パターンを指定したり、
ハイフン (-) で始まるパターンを保護したりすることができます。 (-e オプションは POSIX
で規定されています)
-f FILE, --file=FILE
パターンを FILE から 1 行 1 パターンとして読み込みます。
空のファイルはパターンを含まないので、何にもマッチしません。 (-f オプションは POSIX
で規定されています)
-i, --ignore-case
PATTERN と入力ファイルの双方で、アルファベットの大文字と小文字を 区別しないようにします。 (-i
オプションは POSIX で規定されています)
-v, --invert-match
マッチの意味を逆にして、マッチしない行を抜き出して表示します。 (-v オプションは POSIX
で規定されています)
-w, --word-regexp
マッチする部分が完全な単語を形成するときにのみ、その行を選択します。
次の条件を検査します。パターンにマッチする部分文字列は、行頭にあるか、
さもなければ、単語構成文字以外の文字の直後になければならない。
また、その部分文字列は、行末にあるか、さもなければ、単語構成文字以外の文字の
直前になければならない (訳注: ここで「完全な単語を形成する」というのは、
それが空白、改行、引用符、句読点などで前後を区切られた文字列だ ということです。たとえば、文字列「A
word with you」中の word という 部分文字列は完全な単語ですが、文字列「two words」中の部分文字列
word は 完全な単語を形成しません)。 単語構成文字とは、アルファベット、数字、アンダスコアです
(訳注: 実は漢字や仮名も単語構成文字として扱われます)。
-x, --line-regexp
パターンが行全体とぴったりマッチしたときにのみ、その行を選択します。 (-x オプションは POSIX
で規定されています)
-y -i と同じ意味を持つ旧式のオプションです。
一般的な出力の制御
-c, --count
通常の出力はせず、各入力ファイルについてマッチした行数を表示します。 -v, --invert-match オプション
(上記参照) と共に指定した場合は、 マッチしなかった行数を表示します。 (-c オプションは POSIX
で指定されています)
--color[=WHEN], --colour[=WHEN]
マッチした (空文字列ではない) 文字列、マッチする行、前後の文脈行、
ファイル名、行番号、バイトオフセット、(フィールドや、前後の文脈行を含む グループ同士の)
区切り記号をエスケープ・シーケンスで囲み、ターミナル上に 色付きで表示します。
どの色を使うかは、環境変数 GREP_COLORS で定義します。非推奨の環境変数 GREP_COLOR
も、これまでどおり使用できますが、その設定は優先されません。 WHEN は never, always, auto
のいづれかです。
-L, --files-without-match
通常の出力はしません。その代わりに、 grep
を普通に実行した際に、何の検索結果も表示しないような入力ファイルの名前を 列挙します (訳注:
すなわち、-L オプションを指定すると、 -v オプションを同時に指定しない場合は、パターンにマッチする
文字列を含む行がまったく存在しないファイルの名前を列挙するということです)。
個々のファイルに対する走査は、最初のマッチで終了します。
-l, --files-with-matches
通常の出力はしません。その代わりに、 grep
を普通に実行した際に、何らかの検索結果を表示するような入力ファイルの名前を 列挙します (訳注:
すなわち、-l オプションを指定すると、 -v オプションを同時に指定しない場合は、パターンにマッチする
文字列を含む行が存在するファイルの名前を列挙するということです)。
個々のファイルに対する走査は、最初のマッチで終了します。 (-l オプションは POSIX
で規定されています)
-m NUM, --max-count=NUM
マッチした行数が NUM に達したら、ファイルの読み込みを中止します。
入力が通常ファイルから標準入力を介して行われている場合は、マッチした行を NUM 行出力した時点で、
grep は標準入力の読み出し位置を最後にマッチした行の直後に来るようにしてから、
終了します。続いて表示する文脈行がある場合でも、この動作は変わりません。 このことは、 grep
を呼び出すプロセスが、中止したところから検索を 再開することを可能にします。 grep
はマッチした行数が NUM に達してストップしたとき、それに続く文脈行があれば、それを出力します。 -c
や --count オプションを同時に使用した場合、 grep は NUM よりも大きい数を出力しません。 -v や
--invert-match を同時に使用した場合は、マッチしない行を NUM 行出力したところで、 grep
はストップします。
-o, --only-matching
マッチする行のマッチした部分だけを (それが空文字列でなければ) 表示します。
マッチした各文字列は、それぞれ別の行に書き出します。
-q, --quiet, --silent
沈黙モードです。標準出力に何も書き出しません。 マッチするものが 1
つでも見つかると、エラーを検出していた場合でも、 終了ステータス 0 で即座に終了します。 -s や
--no-messages オプションも参照してください。 (-q オプションは POSIX. で規定されています)
-s, --no-messages
ファイルが存在しないことや読み込みめないことを示す エラーメッセージを抑止します。
移植に関する注意: GNU grep とは異なり、 Unix 第 7 版の grep は POSIX
の規格に沿っていませんでした。なぜなら、それには -q オプションがなく、 -s オプションも GNU grep の
-q オプションのように動作したからです。 USG 系の grep にも -q オプションがありませんでしたが、 -s
オプションの方は GNU の grep と同じように動作しました (訳注: USG は Unix Support Group の略。USG
Unix と言うと、 Unix 第 7 版以後の AT&T 系の商用 Unix を指します)。
移植性を考慮したシェルスクリプトでは、 -q と -s
のどちらも使用することは避けて、標準出力や標準エラーを /dev/null に リダイレクトするべきです。 (-s
オプションは POSIX で規定されています)
出力する行の前に付ける情報の制御
-b, --byte-offset
出力する各行の前に、その入力ファイル内での 0 から始まる バイト単位のオフセットを表示します。 -o
(--only-matching) も指定されているときは、マッチする部分そのもののオフセットを示します。
-H, --with-filename
各々のマッチに対してそのファイル名を表示します。 検索するファイルが 2
個以上の場合は、これがデフォルトの動作です。
-h, --no-filename
出力する行の前にファイル名を付けないようにします。 検索するファイルが 1 つしかない
(あるいは、標準入力だけだった) 場合は、 これがデフォルトの動作です。
--label=LABEL
実際には標準入力から来た入力を LABEL というファイルから来たもののように見せかけます。 これは zgrep
のようなツールを自分で作成する際にとりわけ便利です。たとえば、 gzip -cd foo.gz | grep --label=foo
-H something といった具合です。 -H オプションも参照してください。
-n, --line-number
各出力行の前に、その入力ファイル内での 1 から始まる行番号を表示します。 (-n オプションは POSIX.
で規定されています)
-T, --initial-tab
行の実際の内容をなす最初の文字が、必ずタブ・ストップの位置に
来るようにします。その結果、タブがきちんと揃って見えるようになります。 このオプションは -H,-n,-b
といった、実際の内容の前に情報を付加するオプションを使うときに 役に立ちます。
また、このオプションは、 1 つのファイルから抜き出した行の先頭ができるだけ揃うように、
行番号やバイトオフセットがある場合は、そのフィールド幅を 必要最小のサイズにして表示します。
-u, --unix-byte-offsets
Unix 形式のバイトオフセットを報告します。 このスイッチを使うと、 grep は、検索対象のファイルが
Unix 形式のテキストファイルであるかのように、 バイトオフセットを報告します。すなわち、CR
文字を切り捨てるのです。 そのため、表示される結果は、Unix マシンで grep
を実行したときと同じものになります。 このオプションは、 -b
オプションを同時に使用しないかぎり、効果がありません。 また、このオプションは、MS-DOS と MS-
Windows 以外の プラットホームでは、何の効果もありません。
-Z, --null
ファイル名に続いて通常出力される文字の代わりに、 値が 0 の 1 バイト (ASCII NUL 文字)
を出力します。 たとえば、 grep -lZ は、いつもの改行 (newline) ではなく、値が 0 の 1
バイトを各ファイル名の後ろに 出力するのです。
このオプションは、改行のような変わった文字を含むファイル名があるときでも、
出力の曖昧さをなくしてくれます。 このオプションを find -print0, perl -0, sort -z, xargs -0
などのコマンドと組み合わせて使うと、行儀の悪いファイル名も 処理することができます。
ファイル名が改行文字を含んでいても処理できるのです。
前後の文脈行の制御
-A NUM, --after-context=NUM
NUM で指定した行数だけ、パターンにマッチした行の後に続く文脈も表示します。
マッチした行を含むグループ同士の間には、グループを区切る印 (--) からなる行を置きます。 -o や
--only-matching と同時に使うと、このオプションは効果がなく、警告メッセージを出します。
-B NUM, --before-context=NUM
NUM で指定した行数だけ、パターンにマッチした行に先行する文脈も表示します。
マッチした行を含むグループ同士の間には、グループを区切る印 (--) からなる行を置きます。 -o や
--only-matching と同時に使うと、このオプションは効果がなく、警告メッセージを出します。
-C NUM, -NUM, --context=NUM
NUM で指定した行数だけ、パターンにマッチした行の前後の文脈も表示します。
マッチした行を含むグループ同士の間には、グループを区切る印 (--) からなる行を置きます。 -o や
--only-matching と同時に使うと、このオプションは効果がなく、警告メッセージを出します。
ファイルやディレクトリの選択
-a, --text
バイナリファイルをテキストファイルであるかのように処理します。 これは --binary-files=text
オプションと等価です。
--binary-files=TYPE
ファイルの最初の数バイトが、 ファイルの内容がバイナリデータであることを示す場合、
ファイルのタイプを TYPE であると仮定します。 デフォルトでは TYPE は binary であり、通常 grep
は、マッチする部分がバイナリファイルに存在する場合は、その旨一行メッセージで
表示します。マッチする部分がない場合には何も表示しません。 TYPE が without-match の場合、 grep
はバイナリファイルはマッチしないものと決めてかかります。 これは -I オプションと等価です。 TYPE が
text の場合、 grep はバイナリファイルをテキストであるかのように扱います。 これは -a
オプションと等価です。 警告: grep --binary-files=text はバイナリのゴミを出力するかもしれません。
出力先が端末であり、しかも 端末ドライバがゴミの一部をコマンドだと解釈する場合には、
このゴミが厄介な副作用を起こす可能性があります。
-D ACTION, --devices=ACTION
入力ファイルがデバイス、FIFO、ソケットのいづれかである場合に、 ACTION を使ってその処理を行います。
デフォルトの ACTION は read です。すなわち、デバイスなどを、それが普通のファイルであるかのように、
読み込みます。 ACTION が skip ならば、デバイスなどを黙ってスキップします。
-d ACTION, --directories=ACTION
入力ファイルがディレクトリの場合に、 ACTION を使ってその処理を行います。デフォルトの ACTION は
read です。すなわち、ディレクトリを、それが普通のファイルであるかのように、 読み込みます。 ACTION
が skip ならば、ディレクトリを黙ってスキップします。 ACTION が recurse なら、 grep
は各ディレクトリの下にあるすべてのファイルを再帰的に読み込みます。 これは -r
オプションと等価です。
--exclude=GLOB
ベースネーム (訳注: パスなしのファイル名) が GLOB にマッチするファイルをスキップします
(ワイルドカードのマッチングを 使用します)。 GLOB で指定するファイル名には、 *, ?, [...]
がワイルドカードとして使えます。 \ を文字の前に置けば、
ワイルドカード文字やバックスラッシュ文字を本来の意味で使用できます。
--exclude-from=FILE
ファイル FILE を読み込み、そこに書かれているファイル名 (ワイルドカード可) のどれかに
ベースネームがマッチするファイルをスキップします (--exclude
の項で説明したワイルドカードのマッチングを使用します)。
--exclude-dir=DIR
DIR というパターンにマッチするディレクトリを再帰検索から除外します。
-I バイナリファイルをマッチするデータを含んでいないものとして 処理します。これは
--binary-files=without-match オプションと等価です。
--include=GLOB
ベースネームが GLOB にマッチするファイルのみを検索します (--exclude
の項で説明したワイルドカードのマッチングを使用します)。
-R, -r, --recursive
各ディレクトリの下にあるすべてのファイルを再帰的に読み込みます。 これは -d recurse
オプションと等価です。
その他のオプション
--line-buffered
行ごとに出力を行います。 実行速度が落ちるかもしれません。
--mmap 可能ならば、デフォルトの read(2) システムコールの代わりに mmap(2)
システムコールを使って入力を読み込みます。 場合によっては --mmap
を指定すると、性能が上がることがあります。 しかし、 grep
の動作中に入力ファイルがほかのプロセスによって切り詰められたり、 I/O エラーが生じたりすると、
--mmap は (コアダンプを含む) 未定義の動作を引き起こす可能性があります。
-U, --binary
ファイルをバイナリとして扱います。MS-DOS や MS-Windows の環境下で、 grep
はデフォルトでは、ファイルから読み取った最初の 32KB の内容を見て、ファイルタイプを推測します。
grep はファイルをテキストファイルと判断した場合、オリジナルのファイル内容から (^ や $
を使った正規表現が正しく動作するように) CR 文字を取り除きます。 -U
を指定すると、この推測を抑制し、すべてのファイルを読み取って、
そのまま手を加えずにマッチ処理へ渡すのです。もしファイルが 各行の末尾に CR/LF
の組み合わせを持つテキストファイルなら、
このオプションのせいで正規表現がうまく働かないことがあるかもしれません。 このオプションは MS-DOS
や MS-Windows 以外のプラットフォームでは 効果がありません。
-z, --null-data
各行が改行ではなく、値が 0 の 1 バイト (ASCII NUL 文字)
で区切られる、そういう行の集まりとして入力を処理します。 -Z や --null と同様、このオプションは
sort -z などのコマンドと組み合わせて、 行儀の悪いファイル名の処理に使用することができます。
正規表現
正規表現とは、一群の文字列を一まとめにして表現するパターンのことです。
正規表現の構成方法は、数式によく似ています。すなわち、さまざまな演算子を
使い、小さな表現を組み合わせて構成するのです。
grep は、「基本」正規表現、「拡張」正規表現、「Perl の」正規表現という 3
種類の正規表現文法を扱うことができます。 GNU grep
では、「基本」と「拡張」の文法の間で、利用できる機能に違いはありません。
他の実装では、基本正規表現は拡張正規表現ほど強力ではないものです。 ここでは、拡張正規表現について説明し、
基本正規表現との相違については、後で簡単にまとめることにします。 なお、Perl
の正規表現は機能がさらに増加しており、 pcresyntax(3) や pcrepattern(3) で詳細に解説されていますが、
どのシステムでも利用できるとはかぎりません。
正規表現を構成する基本単位は、1 文字にマッチする正規表現です。
アルファベットや数字を含むほとんどの文字が、自分自身にマッチする正規表現です。
また、特殊な意味を持つメタ文字も、その文字の前にバックスラッシュ
を付けると、その本来の文字にマッチするようになります。
ピリオド . は、任意の 1 文字にマッチします。
文字クラスと角括弧式 (ブラケット式)
角括弧式 とは、 [ と ] で囲まれた文字のリストのことです。 角括弧式 は、リスト中の任意の 1
文字にマッチします。 また、リストの最初の文字がキャレット ^ の場合は、リスト中の文字以外の任意の 1
文字にマッチします。 たとえば、正規表現 [0123456789] は任意の数字 1 個にマッチするわけです。
角括弧式の内側に 範囲式 を置くことができますが、これはハイフンで区切られた 2 つの文字から
なっています。範囲式は、現在使用中のロケールにおける照合順序と 文字集合を使ったときに、その 2
文字の間に並ぶ、その 2 文字を含む 任意の 1 文字にマッチします。 たとえば、デフォルトの C ロケールでは、
[a-d] は [abcd] と等価です。 多くのロケールでは文字を辞書式の順序で並べていますが、そうしたロケールで
[a-d] が [abcd] と等価でないこともよくあります。 たとえば、 [aBbCcDd] と等価かもしれないのです。
角括弧式を伝統的な意味に解釈させたいなら、 環境変数 LC_ALL の値を C に設定して、C
ロケールを使用するとよいでしょう。
最後に、角括弧式内で使えるように、特定の名前を持つ文字クラスが あらかじめ定義されています。
名前が内容を示しており、それは次のようなものです。 [:alnum:], [:alpha:], [:cntrl:], [:digit:], [:graph:],
[:lower:], [:print:], [:punct:], [:space:], [:upper:], [:xdigit:]。 たとえば、 [[:alnum:]] は [0-9A-Za-z]
と同じです。ただし、後者が C ロケールや ASCII 文字コードに依存しているのに対して、
前者はロケールや文字集合に依存しません。
(こうしたクラス名に使用されている角括弧は、シンボル名の一部なので、
角括弧式の前後に付く角括弧とは別に指定する必要があることに 注意してください。)
角括弧式の内側では、ほとんどのメタ文字がその特別な意味を 持たなくなります。 ]
という記号そのものを角括弧式に含めるには、 それをリストの先頭に置いてください。 同様に、 ^
という記号そのものを含めるには、 それを先頭以外のどこかに置けばよいでしょう。 最後に、 -
そのものを含めるには、 それをリストの最後に置きます。
行頭と行末 (アンカリング)
キャレット ^ と ドル記号 $ は、それぞれ行頭と行末の空文字列にマッチするメタ文字です。
バックスラッシュ付きの特別な表現
シンボル \< とシンボル \> は、それぞれ単語の先頭と末尾の空文字列にマッチするメタ文字です。 シンボル \b
は単語の端の空文字列にマッチします。 シンボル \B は単語の端 以外 の空文字列にマッチします。 シンボル \w
は [[:alnum:]] と同じ意味で、 シンボル \W は [^[:alnum:]] と同じ意味です。
繰り返し
正規表現の後には、繰り返し演算子のどれかが続くことがあります。
? 直前の項目があってもなくてもよく、マッチするとしても 1 回だけということ。
* 直前の項目が 0 回以上マッチするということ。
+ 直前の項目が 1 回以上マッチするということ。
{n} 直前の項目がちょうど n 回マッチするということ。
{n,} 直前の項目が n 回以上マッチするということ。
{,m} 直前の項目が m 回以下マッチするということ。
{n,m} 直前の項目が n 回以上 m 回以下マッチするということ。
結合
2 つの正規表現は結合することができます。 結果としてできあがる正規表現は、
結合対象となる部分表現にそれぞれマッチする 2
つの部分文字列を結合して作られる、どんな文字列にもマッチします。
選択
2 つの正規表現は中置き型演算子の | で繋ぐことができます。 結果としてできあがる正規表現は、
どちらかの部分表現にマッチするどんな文字列にもマッチします。
優先順位
繰り返しは結合に優先します。また結合は選択に優先します。 表現の 1
つのまとまりを括弧でくくると、その内側の式をこうした優先規則より さらに優先させることができます。
括弧でくくった部分は、1 つの部分表現になるのです。
後方参照と部分表現
n が 1 個の数字であるような 後方参照 \n は、正規表現中の括弧で囲まれた n
番目の部分表現が前もってマッチした文字列とマッチします。
基本正規表現と拡張正規表現
基本正規表現では、メタ文字 ?, +, {, |, (, ) は、その特殊な意味を失います。バックスラッシュを付けた \?,
\+, \{, \|, \(, \) を代わりに使用してください。
元々の egrep は、 { をメタ文字としてサポートしていませんでしたし、 { の代わりに \{
をメタ文字としてサポートする egrep の実装も存在します。 ですから、移植を考慮したスクリプトでは、 grep -E
のパターンで { を使用することは避けるべきです。 { という記号そのものにマッチさせたいときは [{]
を使うとよいでしょう。
GNU の grep -E は、 { が繰り返し回数指定の始まりとして意味をなさない場合、
それを特殊文字ではないと見なし、従来の用法のサポートを試みます。 たとえば、コマンド grep -E '{1'
は、正規表現に文法エラーがあると報告するかわりに、2 文字からなる文字列 {1 を検索するのです。
この動作は、POSIX.2 によって拡張として認められていますが、
移植を考慮したスクリプトでは使用しない方がよいでしょう。
環境変数
grep の動作は、 以下に挙げる環境変数の影響を受けます。
LC_foo カテゴリのロケールは、 LC_ALL, LC_foo, LANG という 3
つの環境変数をこの順番で調べることで決まります。 この 3 つの環境変数のうち、設定されている最初のものが、
LC_foo のロケールを決めるのです。 たとえば、 LC_ALL が設定されていず、 LC_MESSAGES が pt_BR
に設定されているとしましょう。 そのときは、ブラジルのポルトガル語というロケールが LC_MESSAGES
カテゴリに使用されるわけです。 こうした環境変数がまったく設定されていなかったり、ロケールの
カタログがインストールされていなかったり、 grep が各国語サポート (NLS)
を有効にしてコンパイルされていなかったり した場合は、C ロケールが使用されます。
GREP_OPTIONS
この変数ではデフォルトのオプションを指定しますが、そうしたオプションは
コマンドラインで明示的に指定するオプションの前に置かれることになります。 たとえば、 GREP_OPTIONS
が '--binary-files=without-match --directories=skip' ならば、 grep は、
コマンドラインで明示的に指定するオプションの前に --binary-files=without-match と
--directories=skip の 2 つのオプションがすでに指定されているかのように振舞うわけです。
オプションを複数指定するときは、空白 (whitespace) で区切ります。
バックスラッシュは次に来る文字をエスケープするので、 空白 (whitespace)
やバックスラッシュを含むオプションを指定するのに 使うことができます。
GREP_COLOR
この変数は、パターンにマッチした (空文字列ではない) テキストを強調するために
使用する色彩を指定します。 GREP_COLORS
変数を使用する方が望ましく、この変数は非推奨なのですが、今でも 使えないことはありません。
GREP_COLORS 変数の mt, ms, mc 機能を使用している場合は、この変数による指定より、そちらのほうが
優先されます。 この変数によって指定できるのは、マッチする空文字列ではないテキストを
強調するために、マッチする行ならどこでも使用する色彩だけなのです
(マッチする行は、コマンドラインオプション -v を指定しなかったときは、選択される行になり、 -v
を指定したときは、前後の文脈行になります)。 この変数のデフォルトの値は 01;31
ですが、それはターミナルのデフォルトの背景色に赤い前景色の太字で
テキストを表示するということです。
GREP_COLORS
この変数は、出力のさまざまな部分を強調するために使用する、 色彩などの属性を指定します。
この変数の値はコロンで区切った機能のリストであり、 デフォルトでは、
ms=01;31:mc=01;31:sl=:cx=:fn=35:ln=32:bn=32:se=36 になっていて、 rv と ne
という真偽値を取る機能は設定してありません (すなわち、false になっています)。
使用できる機能は、以下のとおりです。
sl= 選択される行全体に適用される SGR パラメータ (選択される行とは、コマンドラインで -v
オプションを指定しなかったときは、マッチする行、 -v
オプションを指定したときは、マッチしない行のことです)。 ただし、値に真偽値を取る rv
機能とコマンドライン・オプションの -v
の両方を指定したときは、前後の文脈行扱いになるマッチする行に 適用されます。
デフォルトは空です (すなわち、端末のデフォルトの背景色と 前景色の組み合わせ)。
cx= 前後の文脈行全体に適用される SGR パラメータ (前後の文脈行とは、コマンドラインで -v
オプションを指定しなかったときは、マッチしない行、 -v
オプションを指定したときは、マッチする行のことです)。 ただし、値に真偽値を取る rv
機能とコマンドライン・オプションの -v の両方を指定したときは、選択されるマッチしない行に
適用されます。 デフォルトは空です (すなわち、端末のデフォルトの背景色と
前景色の組み合わせ)。
rv コマンドラインで -v が指定されているときに、 sl= と cx= 機能の意味を逆にする (入れ替える)
真偽値。 デフォルトは空です (すなわち、この機能は指定されていません)。
mt=01;31
マッチする行ならどこでも、空文字列ではないマッチするテキストに適用される SGR パラメータ
(マッチする行は、コマンドラインで -v オプションを指定しなかったときは、選択される行になり、
-v を指定したときは、前後の文脈行になります)。 この機能を設定するのは、 ms= と mc=
を同時に同じ値に設定するのと同じことです。
デフォルトは、カレント行の背景色に赤い前景色の太字になっています。
ms=01;31
選択される行中の空文字列ではないマッチするテキストに適用される SGR パラメータ
(この機能が使用されるのは、コマンドラインで -v オプションを指定しないときだけです)。 sl=
機能 (rv が設定されているときは、 cx= 機能)
の効果は、この機能を使用しても、相変わらず有効です。
デフォルトは、カレント行の背景色に赤い前景色の太字になっています。
mc=01;31
前後の文脈行中の空文字列ではないマッチするテキストに適用される SGR パラメータ
(この機能が使用されるのは、コマンドラインで -v オプションが指定されているときだけです)。
cx= 機能 (rv が設定されているときは、 sl= 機能)
の効果は、この機能を使用しても、相変わらず有効です。
デフォルトは、カレント行の背景色に赤い前景色の太字になっています。
fn=35 表示される行の前にファイル名が付くとき、それに適用される SGR パラメータ。
デフォルトは、端末のデフォルトの背景色にマゼンタの前景色の文字です。
ln=32 表示される行の前に行番号が付くとき、それに適用される SGR パラメータ。
デフォルトは、端末のデフォルトの背景色に緑の前景色の文字です。
bn=32 表示される行の前にバイトオフセットが付くとき、それに適用される SGR パラメータ。
デフォルトは、端末のデフォルトの背景色に緑の前景色の文字です。
se=36 区切り記号に適用される SGR パラメータ。 区切り記号としては、選択される行のフィールド間には
':' を置き、 前後の文脈行のフィールド間には '-' を置きます。
前後の文脈行の表示が指定されているときは、隣接行グループの間に '--' を挿入します。
デフォルトは、端末のデフォルトの背景色にシアンの前景色の記号です。
ne 真偽値です。通常、色付けされた項目が終わるたびに、 エスケープ・シーケンス Erase in Line
(EL) to Right (\33[K) を使用して、行末まで消去しますが、 ne
を設定すると、それをやらなくなります。 これは、端末が EL
をサポートしていない場合に必要です。 そのほか、 真偽値を取る terminfo の機能
back_color_erase (bce) を使用していない端末で、採用した強調色が背景に作用しない場合や、 EL
が遅すぎたり、画面にひどいチラつきを引き起こしたりする場合にも、 これの設定が役に立ちます。
デフォルトは false です (すなわち、この機能は設定されていません)。
真偽値を取る機能には =.. の部分がないことに注意してください。そうした機能はデフォルトでは
設定されていず (すなわち、false)、設定されたとき true になります。
使用しているテキスト端末の文書にある Select Graphic Rendition (SGR) の
セクションを見て、使用できる値や、それが文字属性として使われたときの意味を 調べてください。 SGR
パラメータの値は十進法の整数であり、セミコロンで結合することができます。 grep
はそうしたセミコロンで結合された数字から完全な SGR シーケンス (\33[...m) を構成します。
結合される値でよく使われるものを挙げると、 1 は太字、 4 は下線、 5 は点滅、 7 は反転です。 39
はデフォルトの前景色、 30 から 37 は前景色、 90 から 97 は 16 色モードの前景色、 38;5;0 から
38;5;255 は 88 色と 256 色モードの前景色に使われます。また、 49 はデフォルトの背景色であり、 40
から 47 は背景色、 100 から 107 は 16 色モードの背景色、 48;5;0 から 48;5;255 は 88 色と 256
色モードの背景色です。
LC_ALL, LC_COLLATE, LANG
こうした変数は LC_COLLATE カテゴリのロケールを指定します。 LC_COLLATE は [a-z]
のような範囲式を解釈するときの照合順序を決めるものです。
LC_ALL, LC_CTYPE, LANG
こうした変数は LC_CTYPE カテゴリのロケールを指定します。 LC_CTYPE は文字のタイプ、たとえば、空白
(whitespace) に当たるのは どの文字とどの文字か、といったことを決めるものです。
LC_ALL, LC_MESSAGES, LANG
こうした変数は LC_MESSAGES カテゴリのロケールを指定します。 LC_MESSAGES は grep
がメッセージに使う言語を決めるものです。 デフォルトの C
ロケールでは、アメリカ英語のメッセージが使用されます。
POSIXLY_CORRECT
これが設定されていると、 grep は POSIX.2 が要求するとおりの動作をします。
設定されていない場合の動作は、ほかの GNU のプログラムに より近いものです。 POSIX.2
の規定では、ファイル名の後にオプションが現れた場合、
それをファイル名として扱わなければならないことになっています。 これに対して、 grep
のデフォルトでは、そうしたオプションを引き数リストの前の方に移動して、 オプションとして扱います。
また、POSIX.2 の規定では、理解できないオプションは “illegal” (違法)
と判断するようになっていますが、 そうしたオプションも法律に違反しているわけではないので、 grep
のデフォルトでは、“invalid” (無効) という判断を下します。
返り値
通常では、選択する行が見つかったときの終了ステータスは 0 であり、 見つからなかったときは 1
です。エラーが起きた場合は、 -q , --quiet , --silent
といったオプションが使われていて、しかも、選択する行が見つかったときを 除いて、終了ステータスは 2 です。
しかしながら、POSIX は grep, cmp, diff のようなプログラムに対して、 エラーが起きた場合の終了ステータスは
2 以上でなければならない、 としか要求していないことに注意してください。
ですから、移植性のためには、終了ステータスが 2 と厳密に一致することを
調べるよりも、この一般的な条件をテストするロジックを使用した方が よいでしょう。
著作権
Copyright 1998-2000, 2002, 2005-2010 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO warranty; not even for
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
バグ
バグの報告
バグ報告は <bug-grep@gnu.org> 宛に E メールで送ってください。これはメーリングリストで、 下記がその Web
ページです。
<http://lists.gnu.org/mailman/listinfo/bug-grep>
grep の Savannah バグ・トラッカーは下記にあります。
<http://savannah.gnu.org/bugs/?group=grep>
既知のバク
{n,m} を使って何度も繰り返しを行うと、 grep は大量のメモリを消費するかもしれません。
また、ほかの曖昧な正規表現にも、指数関数的な時間と メモリ空間を要するものがあり、 grep
がメモリ不足を起こすことがあります。
後方参照は非常に遅く、とんでもなく時間がかかることがあります。
関連項目
標準のマニュアルページ
awk(1), cmp(1), diff(1), find(1), gzip(1), perl(1), sed(1), sort(1), xargs(1), zgrep(1), mmap(2),
read(2), pcre(3), pcresyntax(3), pcrepattern(3), terminfo(5), glob(7), regex(7).
POSIX プログラマーズ・マニュアルページ
grep(1p).
TeXinfo 文書
grep のための充実した文書が、TeXinfo マニュアルの形で保守されています。 info と grep
プログラムが御使用のサイトにきちんとインストールされているならば、
info grep
とコマンドを打ち込むことで、完備したマニュアルが読めるはずです。
注記
GNU's not Unix, but Unix is a beast; its plural form is Unixen.
訳者謝辞
この翻訳は、FreeBSD jpman Project <http://www.jp.freebsd.org/man-jp/> から Linux JM project
に寄贈していただいたマニュアルを元にし、 GNU grep-2.6.3
所収のマニュアルに合わせて、増補・改訂したものです。 作業に当たっては、FreeBSD jpman Project
の新しいマニュアルの翻訳も 参考にしました。上記の文書を翻訳なさった方々にお礼を申し上げます。
User Commands GNU grep 2.6.3 GREP(1)
Manual page grep(1) line 518/575 (END) (press h for help or q to quit)
sed
sedとは?
Stream EDitor
・UNIX標準のストリームエディタ
・テキストのフィルタリング、変換用のストリームエディタ
・1973年ごろ、Lee E. McMahonによって作成された
sed コマンドの用法
sed (GNU sed) 4.2.2
2012年12月22日リリース
CentOS7
$ sed --version
sed (GNU sed) 4.2.2
Copyright (C) 2012 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Written by Jay Fenlason, Tom Lord, Ken Pizzini,
and Paolo Bonzini.
GNU sed ホームページ: <http://www.gnu.org/software/sed/>.
GNU ソフトウェアを使用する際の一般的なヘルプ: <http://www.gnu.org/gethelp/>.
電子メールによるバグ報告の宛先: <bug-sed@gnu.org>
報告の際、“Subject:” フィールドのどこかに “sed” を入れてください。
翻訳に関するバグは<translation-team-ja@lists.sourceforge.net>に報告してください。
$ info sed
This file documents version 4.2.2 of GNU `sed', a stream editor.
CentOS7における man sed 日本語
$ man sed
.
SED(1) ユーザコマンド SED(1)
名前
sed - テキストのフィルタリング、変換用のストリームエディタ
書式
sed [OPTION]... {script-only-if-no-other-script} [input-file]...
説明
sed はストリームエディタである。ストリームエディタは、入力ストリーム
(ファイルまたはパイプラインからの入力) に対して基本的なテキスト変換を行うために用いられる。sed は
編集スクリプトを使える (ed のような) エディタと いろいろな面で似ているが、sed は入力に対して 1
パスだけで動作するので、より効率的である。また sed
はパイプラインのテキストに対してフィルタ動作を行うことができ、この点は他のタイプのエディタとはっきり違う。
-n, --quiet, --silent
パターンスペースの自動出力を抑制する
-e script, --expression=script
実行するコマンドとして script を追加する
-f script-file, --file=script-file
実行するコマンドとして script-file の内容を追加する
--follow-symlinks
インプレース処理においてシンボリックリンクを辿る
-i[SUFFIX], --in-place[=SUFFIX]
ファイルをインプレース処理で編集する (SUFFIX 指定時はバックアップを取る)
-l N, --line-length=N
`l' コマンドの出力行を折り返す長さを指定する
--posix
全ての GNU 拡張を無効にする
-r, --regexp-extended
スクリプトで拡張正規表現を使用する
-s, --separate
複数の入力ファイルを一続きのストリームとして扱わずに個別のファイルとして扱う
-u, --unbuffered
入力ファイルからデータをごく少量ずつ取り込み、頻繁に出力バッファを掃き出す (flush)
-z, --null-data
NUL 文字で行を分割する
--help
ヘルプを表示して終了する
--version
バージョン情報を出力して終了する
-e、--expression、-f、または --file オプションのいずれも指定されない場合、最初のオプションでない引き数が
sed
スクリプトとして解釈される。残りの全ての引き数は入力ファイル名として扱われる。入力ファイルが指定されない場合は、標準入力から読み込む。
GNU sed ホームページ: <http://www.gnu.org/software/sed/>. GNU ソフトウェアを使用する際の一般的なヘルプ:
<http://www.gnu.org/gethelp/>. 電子メールによるバグレポートの宛先: <bug-sed@gnu.org>. 「Subject:
」フィールドのどこかに「sed」を記載してください。
コマンドの文法
これは sed コマンドのごく簡単な概要であり、既に sed
を知っている人向けの備忘録程度のものである。より詳細な情報については、他の文書 (texinfo 文書など)
を参照すること。
アドレスを取らないコマンド
: label
b コマンドと t コマンド用のラベル。
#comment
次の改行文字まで (あるいは -e スクリプトフラグメントの末尾まで) をコメントとして取り扱う。
} { } ブロックの閉じ括弧。
アドレスを 0 または 1 個取るコマンド
= 現在の行番号を出力する。
a \
text text を追加する。text に改行を含める場合は、各改行の前にバックスラッシュを置く。
i \
text text を挿入する。text に改行を含める場合は、各改行の前にバックスラッシュを置く。
q [exit-code]
これ以上入力を処理せず、ただちに sed
スクリプトの処理を終了する。ただし自動出力が抑制されていない場合、現在のパターンスペースが出力される。引き数
exit-code は GNU 拡張である。
Q [exit-code]
これ以上入力を処理せず、ただちに sed スクリプトの処理を終了する。引き数 exit-code は GNU
拡張である。
r filename
filename から読み込んだテキストを追加する。
R filename
filename から 1 行読み込み、追加する。コマンドを起動するたびにファイルから次の 1
行を読み込む。このコマンドは GNU 拡張である。
アドレス範囲を指定できるコマンド
{ コマンドブロックを開始する (} で終了する)。
b label
label に分岐する。label が省略された場合は、スクリプトの末尾に分岐する。
c \
text 選択した行を text で置換する。text に改行を含めたい場合は、その前にバックスラッシュを置く。
d パターンスペースを削除する。次のサイクルを開始する。
D パターンスペースに改行がない場合は、d
コマンドと同様に通常の次のサイクルを開始する。そうでない場合は、パターンスペースの最初の改行までを削除し、次の入力行を読み込まずに、その結果の
パターンスペースでサイクルを開始する。
h H パターンスペースをホールドスペースにコピー/追加する。
g G ホールドスペースをパターンスペースにコピー/追加する。
l 現在の行を「視覚的に曖昧性のない」形式でリストする。
l width
現在の行を「視覚的に曖昧性のない」形式でリストし、width の文字で折り返す。このコマンドは GNU
拡張である。
n N 入力の次の行をパターンスペースに読み込む/追加する。
p 現在のパターンスペースを出力する。
P 現在のパターンスペースの最初の改行までを出力する。
s/regexp/replacement/
パターンスペースに対して regexp のマッチを試みる。マッチに成功すると、マッチした部分を replacement
に置換する。replacement には特殊文字である &
を含めることができ、これはパターンスペースのマッチした部分を参照する。また \1 から \9
までの特殊エスケープを含むこともでき、これは regexp の部分正規表現 (sub-expression)
にマッチした部分をそれぞれ参照する。
t label
直近の入力行が読み込まれて以降、かつ、直近の t あるいは T コマンド以降に、s
コマンドが成功していれば、label に分岐する。label が省略された場合は、スクリプトの末尾に分岐する。
T label
直近の入力行が読み込まれて以降、かつ、直近の t あるいは T コマンド以降に、s
コマンドが成功していなければ、label に分岐する。label
が省略された場合は、スクリプトの末尾に分岐する。このコマンドは GNU 拡張である。
w filename
現在のパターンスペースを filename に書き込む。
W filename
現在のパターンスペースの先頭行を filename に書き込む。このコマンドは GNU 拡張である。
x ホールドスペースとパターンスペースの内容を交換する。
y/source/dest/
パターンスペースにある文字のうち、source にあるものを、dest の同じ位置にある文字に置換する。
アドレス
sed
のコマンドはアドレスなしで指定することもでき、この場合そのコマンドは全ての入力行に対して実行される。アドレスをひとつ指定すると、コマンドはそのアドレスにマッチした入力行に対してのみ実行される。2
つのアドレスを指定ると、最初のアドレスにマッチした行から、2 番目のアドレスにマッチした行に至る範囲
(両マッチ行を含む) にあるすべての行に対して実行される。アドレスの範囲指定については次の 3
点を注意しておく。まず指定方法は addr1,addr2 である (つまりアドレスをコンマで区切る)。addr1
にマッチした行は、たとえaddr2 がそれ以前の行にマッチする場合でも、常に処理対象となる。addr2 が regexp
(正規表現) の場合には、addr1 にマッチした行に対しては addr2 のマッチは行われない。
アドレス (あるいはアドレス範囲) とコマンドの間には ! を挟むことができる。この場合は、アドレス
(あるいはアドレス範囲) がマッチしなかった行に対してのみコマンドが実行される。
以下のアドレスタイプがサポートされている。
number number で指定した行にのみマッチする (コマンドラインで -s
オプションを指定していない場合、行数はファイル間で通算でカウントされる)
first~step
first 行からはじまる step 行おきの行にマッチする。例えば “sed -n 1~2p” は
入力行のうち奇数行を出力し、アドレスを 2~5 にすると、第 2 行から 5 行おきに表示する。first は 0
を指定することが可能である。この場合、step に等しい値が指定されたものとして sed
は処理する。(これは GNU 拡張である)。
$ 最終行にマッチする。
/regexp/
正規表現 regexp にマッチした行にマッチする。
\cregexpc
正規表現 regexp にマッチした行にマッチする。c には任意の文字を指定できる。
GNU sed は、次の特殊な 2 アドレス形式もサポートする。
0,addr2
「先頭アドレスにマッチした状態」で開始し、addr2 が見つかるまでその状態を維持する。これは、1,addr2
に類似しているが、次の点において挙動が異なる。addr2 が入力の先頭行にマッチする場合、0,addr2
形式ではアドレス範囲の終了位置にあるとみなされるが、1,addr2
形式ではアドレス範囲の開始位置にあるとみなされる。このアドレス指定は、addr2
が正規表現の場合にのみ機能する。
addr1,+N
addr1 から、addr1 以降の N 行にマッチする。
addr1,~N
addr1 から、addr1 以降の、入力行番号が N の倍数の行までマッチする。
正規表現
POSIX.2 BRE をサポートするべきであるが、性能上の問題により完全にはサポートしていない。正規表現内部の \n
シーケンスは改行文字にマッチし、\a、\t、およびその他のシーケンスも同様である。
バグ
バグレポートは bug-sed@gnu.org まで送ってください。また、可能であれば、「sed --ver‐
sion」の出力結果をレポート本文に記載してください。
著者
Manual page sed(1) line 175 (press h for help or q to quit)
AWK
AWKとは?
三人の開発者Aho(エイホー)、Kernighan(カーニハン)、Weinberger(ワインバーガー)の頭文字をとって命名された、高機能の文字列処理ツール
・1977年に設計された
GNU Awk 4.0.2
2012年12月26日 リリース
CentOS7
$ awk --version
GNU Awk 4.0.2
Copyright (C) 1989, 1991-2012 Free Software Foundation.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see http://www.gnu.org/licenses/.
CentOS7における info awk
・バージョン明記されていない
・「Dec 07 2012」日付は表示されるが何の日付か不明
$ info awk
Free Software Foundation Dec 07 2012 GAWK(1)
//中略
IEEE/The Open Group 2003 AWK(1P)
CentOS7における man awk 日本語
$ man awk
・日本語manは用意されていない・英語で表示される
・バージョン明記されていない
・「Dec 07 2012」日付は表示されるが何の日付か不明。manの作成日? 少なくともリリース日ではないと思われる
CentOS7における man awk 英語
$ LANG=C man awk
・バージョン明記されていない・「Dec 07 2012」日付は表示されるが何の日付か不明。manの作成日? 少なくともリリース日ではないと思われる
more
テキストを一度に一画面分だけ表示するフィルタプログラム
util-linux
・bin/more
$ more -V
more from util-linux 2.23.2
$ info more
履
more は、 3.0BSD に登場した。 この man ページは 現在 Linux
コミュニティで利用されている more バージョン 5.19 (Berkeley
6/29/88)について書かれている。
$ man more
履歴
more は、 3.0BSD に登場した。 この man ページは 現在 Linux コミュニティで利用されている more バージョン
5.19 (Berkeley 6/29/88)について書かれている。 ドキュメントの作成に当っては、他の数種類のバージョンの man
ページを利用し、 ソースコードの徹底的なチェックを行った。
$ LANG=C man more
util-linux September 2011
・more (command)
CentOS7
一覧
デフォルト
名称 | バージョン | infoバージョン | manバージョン | man日本語バージョン | 作成年 | 開発者 | アルゴリズム | 備考 |
---|---|---|---|---|---|---|---|---|
GNU awk | 4.0.2 | 明記されていない(2012年) | 明記されていない(2012年) | 明記されていない(2012年) | - | _ | _ | _ |
GNU Grep | 2.20 | 2.20(2014年) | 2.20(2014年) | 2.6.3(2010年) | - | Mike Haertel | Boyer-Moore | - |
GNU sed | 4.2.2 | 4.2.2(2012年) | 明記されていない | 4.2.2(2012年) | - | Lee E. McMahon | _ | |
more | util-linux 2.23.2 | 5.19(1988年) | 5.19(1988年) | 明記されていない(2011年) | - | _ | _ | _ |
CentOS7
regex - POSIX.2 正規表現
$ man 7 regex
REGEX(7) Linux Programmer's Manual REGEX(7)
名前
regex - POSIX.2 正規表現
説明
正規表現 (Regular expression: RE) は POSIX.2 で定義されており、 二つの形式がある。新しい正規表現 (modern
RE) と古い正規表現 (obsolete RE) である。新しい正規表現はだいたい egrep のものと同じで、 POSIX.2
では「拡張」正規表現 ("extended" RE) と呼ばれている。古い正規表現はだいたい ed(1) のものと同じで、
POSIX.2 では「基本」正規表現 ("basic" RE) である。
古い正規表現は、古いプログラムとの互換性を保つためのものである。 これについては最後に議論する。 POSIX.2
では、正規表現の文法や記号の一部が、未定義のまま残されている。 "(!)" は、このような意味で、他の POSIX.2
の実装と 完全には互換でないかも知れない部分である。
(新しい) 正規表現は一つ以上(!) の空白でない 枝 (branch) からなる。 枝どうしは '|'
で区切られる。正規表現は、 枝のどれかにマッチ (match) したものにマッチする。
枝は一つ以上の文節 (piece) が結合されたものである。 枝は第一の文節がマッチし、
続いて第二の文節がマッチし、... したものにマッチする。
文節はアトム (atom) からなる。ただしアトムの後には一つ(!) の '*', '+', '?' あるいは 繰り返し指定 (bound)
が続くこともある。 '*' が後置されたアトムは、マッチしたアトムの 0 個以上の並びにマッチする。 '+'
が後置されたアトムは、マッチしたアトムの 1 個以上の並びにマッチする。 '?'
が後置されたアトムは、マッチしたアトムの 0 個または 1 個にマッチする。
繰り返し指定とは '{' に続いて、符号なし 10 進整数、','、 もう一つの 10 進整数、'}'
を並べたものである。',' と二つめの 10 進整数は省略できる。二つめの 10 進整数だけを省略することもできる
(最後の `}' は省略できない)。 整数は 0 以上 RE_DUP_MAX (255(!)) 以下の間で指定できる。
二つ指定する場合には、最初の数値は後の数値を越えてはならない。 整数 i
だけからなる繰り返し指定を後置されたアトムは、 アトムをぴったりちょうど i 個だけ並べたものにマッチする。
整数 i とコンマが指定された繰り返し指定を後置されたアトムは、 アトムを i個以上並べたものにマッチする。
整数 i と j が指定された繰り返し指定を後置されたアトムは、 アトムを i個以上 j
個以下だけ並べたものにマッチする。
アトムの種類は以下の通り。"()" に囲まれた正規表現 (その正規表現がマッチする文字列にマッチする)、
中身が空の "()" (null 文字列にマッチする)(!)、 ブラケット表現 (bracket expression :後述)、 '.' (任意の 1
文字にマッチする)、 '^' (行頭の空白文字にマッチする)、 '$' (行末の空白文字にマッチする)、 '\' に
"^.[$()|*+?{\" のいずれか一文字を後置したもの (通常の文字として扱われ、その文字にマッチする)、 '\'
にそれ以外の文字を後置したもの(!) ('\' がない場合と同じように、その文字にマッチする(!))、
特に意味を持たない文字一つ (その文字にマッチする)。 '{'
は数字以外の文字が後置されると通常の文字として扱われ、 繰り返し指定の始まりとはされない(!)。'\'
で終わる正規表現は不正なものとみなされる。
ブラケット表現は "[]" によって閉じられた文字のリストである。
これは通常リスト中に存在している文字にマッチする。 (例外あり、後述。) リストが '^' で始まると、
ブラケット表現はリストに存在していない文字一つにマッチする (例外あり、後述)。 リスト中の二つの文字が '-'
で区切られている場合は、 これは照合順序 (collating sequence) でその二つの文字に挟まれる、
すべての文字の並びを短縮したものとみなされる (両端含む)。 例えば "[0-9]" は ASCII では 10 進の数字
(digit) のいずれかにマッチする。 二つの領域指定が端点を共有してはならない(!)。 つまり "a-c-e"
のようなものは不正である。領域指定は照合順序に強く依存する。
したがって移植性の高いプログラムを作る場合は、 領域指定には頼らないほうが良いだろう。 【訳注: 照合順序
(collating sequence) というのは、国際化 (Internationalization)
に関連した用語です。アルファベット順に単語を並
べる際には、言語によって並べる基準が異なります。照合順序は、その差異を 吸収するための仕組みです。
例えば、スペイン語では ch という文字並びを特別扱いするため、アルファベッ ト順が a, b, c, ch, d, e, ...
の順になるそうです。このようなシーケンス のことを collating sequence と言います。このとき `ch'
という文字並びは、 単語整列の際にあたかも「一文字」のように扱われます。ここで、
順序付けを行う際に最小の単位となる、`a'、`b' の文字や `ch'
のような特別な文字並びなど、照合順序の要素のことを collating element と言います。collating sequence
は、文字単位ではなく collating element を単位として定義されます。】
文字 ']' そのものをリストに入れたい場合は、 最初の文字として指定すれば良い ('^')
の後に続けるのでも良い)。 文字 '-' そのものをリストに入れたい場合は、 最初か最後の文字とすれば良い。
あるいは領域指定の終端文字として指定しても良い。 '-' を領域指定の先頭文字に指定するには、"[." と ".]"
で囲って、 照合順序の要素 (collating element: 後述) にすれば良い。 他の特殊文字 ( も含む) は、
ブラケット表現の内部ではすべて通常の文字として扱われる。
ブラケット表現の内部では、"[." と ".]" に囲われた照合順序の要素は、 その要素に対応する文字並びを表す。
「照合順序の要素」とは、 [1] 文字、 [2] 単一文字のように扱われる複数文字のシーケンス、 [3] 1, 2
いずれかに対応する照合順序上の名前、のいずれかである。
この繰り返しは、ブラケット表現のリストにおける単一の要素となる。 上記 [2]
の、「複数文字からなる照合順序要素」を含むブラケット表現は、 したがって一文字以上にマッチすることがある。
例えば、もし照合順序が "ch" という要素を含んでいる場合には、 正規表現 "[[.ch.]]*c" は "chchcc" の最初の 5
文字にマッチする。
ブラケット表現の内部では、"[=" と "=]" に囲まれた照合順序の要素は、 等価クラス (equivalence class)
となる。 これは、その要素と等価な要素すべてからなる文字シーケンス (自身も含む) を表す。
他に等価な要素がなければ、 取り扱いは "[." と ".]" で囲まれている場合と同じである。 例えば o と ou
が等価クラスのメンバーであれば、 "[[=o=]]", "[[=^=]]", "[o^]" はすべて同じ意味になる。
等価クラスは領域指定の端点にはなれない(!)。
ブラケット表現の内部では、"[:" と ":]" で囲われた文字クラス (character class)
はそのクラスに属するすべての文字のリストを表す。 標準で用意されている文字クラスの名前は以下の通り:
alnum digit punct
alpha graph space
blank lower upper
cntrl print xdigit
これらは wctype(3) で定義されている文字クラスを表している。ロケール (locale) によって、
これら以外のクラスが定義されることもある。 文字クラスは領域指定の端点にはなれない。
正規表現が、与えられた文字列の複数の部分文字列 (substring) にマッチできるような場合には、
最も先頭の近くから始まるものにマッチする。
その位置から始まり、正規表現がマッチできる部分文字列が複数ある場合には、 最長のものにマッチする。
部分正規表現 (subexpression) も最も長い部分文字列にマッチする。
ただし、全体のマッチが最長であるように、という条件が優先される。
正規表現の中で先に現れる部分正規表現は、後に現れるものより優先される。 ただし、より高位の部分正規表現は、
それを構成する低位の部分正規表現よりも優先されることに注意すること。
マッチ長は照合順序の要素ではなく、文字数を単位としてカウントされる。 null
文字列は、全くマッチしなかった場合よりも長いとみなされる。 例えば "bb*" は "abbbc" のまん中の 3
文字にマッチする。 "(wee|week)(knights|nights)" は "weeknights" の全体にマッチする。 "(.*).*" を "abc"
にマッチさせると、 括弧の内部の部分正規表現が 3 文字すべてにマッチする。 "(a*)*" を "bc"
にマッチさせると、正規表現全体も、 括弧で括られた部分正規表現も null 文字列にマッチする。
マッチが大文字・小文字を無視するように指定されると、
アルファベット全体から大小文字の区別が無くなったかのような効果となる。
大文字・小文字を持つアルファベットがブラケット表現の外部で 通常の文字として現れると、
これは実効的に大小両方の文字のブラケット表現のように変換される。 すなわち 'x' は "[xX]"
となる。ブラケット表現の内部に現れると、
大文字なら小文字が、小文字なら大文字がそのブラケット表現に加えられる。 すなわち "[x]" は "[xX]"
に、"[^x]" は "[^xX]" になる。
正規表現の長さには特に制限はない(!)。 ただし移植性を高くしたいプログラムでは、 256
バイトより長い正規表現は実行しないようにするほうが良い。 なぜなら、そのような正規表現を拒否し、 しかも
POSIX 互換を保つような実装が可能だからである。
古い ("基本") 正規表現は、いくつかの点において異なる。 '|', '+', and '?' は通常の文字となる。
対応する機能は存在しない。繰り返し指定の区切りは "\{" および "\}" となる。'{' と '}' は、
単独では通常の文字として扱われる。 部分正規表現をネストする括弧は "\(" および "\)" となり、 '(' と ')'
は単独では通常の文字となる。 '^' は正規表現の先頭か、
括弧でくくられた部分表現の先頭(!)を除いて通常の文字となる。 '$' は正規表現の末尾か、
括弧でくくられた部分正規表現の末尾(!)を除いて通常の文字となる。 '*' は、正規表現の先頭か、
括弧でくくられた部分文字列の先頭に置かれた場合は通常の文字となる ('^') が前置されていてもよい)。
最後に、アトムとして別のタイプが存在する。 後方参照 (back reference) である。 '\' の後に 0 でない 10
進数値文字 d が続くと、 括弧でくくられた部分正規表現の d 番目にマッチした文字並びと同じものにマッチする。
(部分正規表現の番号付けは、 開き括弧 `(' の位置が左のものから右のものへ向かってなされる。) したがって
"\([bc]\)\1" は "bb" または "cc" にはマッチするが、"bc" にはマッチしない。
バグ
正規表現が 2 種類あるのは格好悪い。
現在の POSIX.2 規格においては、')' は、 対応する '('
がない場合には通常の文字として扱われることになっている。
しかしこれは、本来の意図とは異なる記述上のエラーであり、
修正される可能性が高い。これに依存したコードは使わないこと。
後方参照はひどく出来の悪い代物である。 効率の良い実装をするのはとても難しい。 また定義があいまいである。
("a\(\(b\)*\2\)*d" は "abbbd" にマッチすると思うか?) 使わないほうが良い。
POSIX.2 の規格では、case (大文字か小文字か) に依存しないマッチの記述があいまいである。
現在のところでは「一つの case がすべての case を意味する」 という上記の定義が正しい解釈であるというのが、
実装者の間での共通認識のようである。
著者
このページは Henry Spencer の regex パッケージから採録したものである。
関連項目
grep(1), regex(3)
POSIX.2, section 2.8 (Regular Expression Notation).
この文書について
この man ページは Linux man-pages プロジェクトのリリース 3.51 の一部
である。プロジェクトの説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。
2009-01-12 REGEX(7)
Manual page regex(7) line 106/163 (END) (press h for help or q to quit)
・manpage - I need regex(7)'s manual, but man command shows regex(3)'s manual
regcomp, regexec, regerror, regfree - POSIX regex 関数
$ man regex
REGEX(3) Linux Programmer's Manual REGEX(3)
名前
regcomp, regexec, regerror, regfree - POSIX regex 関数
書式
#include <sys/types.h>
#include <regex.h>
int regcomp(regex_t *preg, const char *regex, int cflags);
int regexec(const regex_t *preg, const char *string, size_t nmatch,
regmatch_t pmatch[], int eflags);
size_t regerror(int errcode, const regex_t *preg, char *errbuf,
size_t errbuf_size);
void regfree(regex_t *preg);
説明
POSIX regex コンパイル
regcomp() は、正規表現をコンパイルして、 regexec() での検索処理に適合する形態にする。
regcomp() はパターンを記憶するバッファへのポインタ preg、 ヌル文字で終端された文字列 regex、
そしてコンパイルの形式を決めるためのフラグ cflag を引数に伴う。
全ての正規表現検索は、コンパイルされたパターンによって行わなければならない。 よって、 regexec()
に指定するのは、必ず (regcomp() によってコンパイルされた)
パターンバッファへのアドレスでなければならない。
cflags には以下に示す定数一つ以上のビットごとの OR (bitwise-or) を指定する。
REG_EXTENDED
regex に POSIX 拡張正規表現を使用する。もしこのフラグが設定されない場合、 POSIX
標準正規表現が使われる。
REG_ICASE
大文字小文字の違いを無視する。このフラグを指定してコンパイルされた パターンバッファを用いて
regexec() 関数を呼び出すと、大文字小文字の区別を付けずに検索が行われる。
REG_NOSUB
マッチの場所を報告しない。渡されたパターンバッファがこのフラグを設定してコンパイルされていた場合、
regexec() の引き数 nmatch, pmatch が無視される。
REG_NEWLINE
全ての文字にマッチするオペレータに改行をマッチさせない。
改行を含まない非マッチング文字リスト ([^...]) に改行をマッチさせない。
regexec() の実行時に指定するフラグ eflags に REG_NOTBOL
を含むかどうかにかかわらず、行頭にマッチするオペレータ (^) を改行直後の空文字列にマッチさせる。
eflags に REG_NOTEOL を含むかどうかにかかわらず、行末にマッチするオペレータ ($)
を改行直前の空文字列にマッチさせる。
POSIX regex マッチング
regexec() は、 プリコンパイルされたパターンバッファ preg をヌル文字で終端された文字列にマッチさせる。
nmatch と pmatch はマッチングの位置に関する情報を取得するのに用いられる。 eflags には REG_NOTBOL と
REG_NOTEOL のどちらか、もしくは両方のビットごとの OR (bitwise-or)
を指定し、以下で説明するようにマッチング動作を変化させる。
REG_NOTBOL
行頭にマッチするオペレータは、必ずマッチに失敗する (コンパイル時のフラグ REG_NEWLINE
の項目も参照)。 このフラグは、複数行にまたがる文字列を regexec()
で検索する際に、文字列の先頭を行の先頭として解釈させない場合に用いる。
REG_NOTEOL
行末にマッチするオペレータは、必ずマッチに失敗する (コンパイル時のフラグ REG_NEWLINE
の項目も参照)。
バイトオフセット
パターンバッファのコンパイル時に REG_NOSUB が設定されない場合は、マッチング位置情報を得ることができる。
pmatch は、少なくとも nmatch の大きさを持つように指定しなければならない。 regexec()
の実行によって、それらに部分文字列マッチング位置情報が代入される。 i
番目の括弧で始まる部分正規表現のオフセットは pmatch[i] に格納される。正規表現全体のマッチアドレスは
pmatch[0] に格納される。 (N 個の部分正規表現のマッチのオフセットを返すためには、 nmatch は最低限 N+1
でなければならない点に注意すること。) 未使用の構造体要素には -1 が値として代入される。
pmatch の型である regmatch_t 構造体は、 <regex.h> 内で定義される。
typedef struct {
regoff_t rm_so;
regoff_t rm_eo;
} regmatch_t;
構造体要素 rm_so の値が -1 でない場合、それは文字列内での次の最大のマッチング部分の開始
オフセット位置を示す。それに対し、構造体要素 rm_eo はマッチング部分の終了オフセット位置を示し、
マッチング部分の直後の文字のオフセット位置が使用される。
POSIX エラーレポート
regerror() は、 regcomp() と regexec() の実行によって得られるエラーコードから、エラーメッセージ文字列を
得るのに用いられる。
regerror() はエラーコード errcode、 パターンバッファ preg、 文字列バッファへのポインタ errbuf、
文字列バッファのサイズ errbuf_size を引数にとる。
この関数は、ヌル文字で終端されたエラーメッセージ文字列を格納するのに必要な errbuf のサイズを返す。もし
errbuf と errbuf_size の両方が非 0 値であれば、 errbuf には最初の errbuf_size - 1
文字分にエラーメッセージと終端の NULL バイト ('\0') が収まるように代入される。
POSIX パターンバッファ解放
引数にコンパイルされたパターンバッファ preg を与えて regfree() を呼び出すと、 regcomp()
によるコンパイル時にパターンバッファに割り当てられたメモリが解放される。
返り値
regcomp() は、コンパイルの成功時には 0 を返し、失敗時にはエラーコードを返す。
regexec() は、マッチングの成功時には 0 を返し、失敗時には REG_NOMATCH を返す。
エラー
regcomp() は以下のエラーを返す。
REG_BADBR
無効な後方参照オペレータの使用。
REG_BADPAT
グループやリストなどの、パターンオペレータの無効な使用。
REG_BADRPT
'*' が最初の文字としてくるような、無効な繰り返しオペレータの使用。
REG_EBRACE
インターバルオペレータ {} (brace interval operators) が閉じていない。
REG_EBRACK
リストオペレータ [] (bracket list operators) が閉じていない。
REG_ECOLLATE
照合順序の要素 (collating element) として有効ではない。 (訳注) 詳細は regex(7) を参照。
REG_ECTYPE
未知のキャラクタクラス名。
REG_EEND
未定義エラー。これは POSIX.2 には定義されていない。
REG_EESCAPE
正規表現がバックスラッシュで終っている。
REG_EPAREN
グループオペレータ () (parenthesis group operators) が閉じていない。
REG_ERANGE
無効な範囲オペレータの使用。 例えば、範囲の終了位置が開始位置よりも前にあるような場合。
REG_ESIZE
正規表現のコンパイルに、64Kb 以上のパターンバッファが必要。 これは POSIX.2 には定義されていない。
REG_ESPACE
regex ルーチンがメモリを使いはたしている。
REG_ESUBREG
サブエクスプレッション \(...\) (subexpression) への無効な後方参照。
準拠
POSIX.1-2001.
関連項目
grep(1), regex(7)
glibc マニュアルのセクション Regular Expression Matching
この文書について
この man ページは Linux man-pages プロジェクトのリリース 3.51 の一部
である。プロジェクトの説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。
GNU 2013-02-11 REGEX(3)
Manual page regex(3) line 130/169 (END) (press h for help or q to quit)
$ info regex
----------
**Q2.POSIXの、単純正規表現、基本正規表現、拡張正規表現について**
・それぞれどういう関係性ですか?
・完全な上位互換ではない?
・「基本正規表現」+「拡張正規表現」ではなく、「基本正規表現」の一部を「拡張正規表現」で書き換えている?
----------
**Q3.POSIXの正規表現仕様について**
・POSIXは(正規表現を含んだ)APIの名称?
・[IEEE Std 1003.1, 2004 Edition][1]が該当??
----------
**Q4.「man regex」について**
・「man regex」したら、「POSIX regex コンパイル」に関する説明が表示され、下記のように表示されていたのですが、これはまた別の話ですか?
・それとも改訂版だから、こちらの方が新しい??
> 準拠
> POSIX.1-2001.
[1]: http://pubs.opengroup.org/onlinepubs/007904975/basedefs/xbd_chap09.html
・**Q2.POSIXの、単純正規表現、基本正規表現、拡張正規表現について**
・それぞれどういう関係性ですか?
・完全な上位互換ではない?
・「基本正規表現」+「拡張正規表現」ではなく、「基本正規表現」の一部を「拡張正規表現」で書き換えている?
----------
**Q3.POSIXの正規表現仕様について**
・POSIXは(正規表現を含んだ)APIの名称?
・[IEEE Std 1003.1, 2004 Edition][1]が該当??
----------
**Q4.「man regex」について**
・「man regex」したら、「POSIX regex コンパイル」に関する説明が表示され、下記のように表示されていたのですが、これはまた別の話ですか?
・それとも改訂版だから、こちらの方が新しい??
> 準拠
> POSIX.1-2001.
[1]: http://pubs.opengroup.org/onlinepubs/007904975/basedefs/xbd_chap09.html
POSIXの正規表現について
Pattern Matching or RegEx Man Page in linux/unix? - Stack Overflow
POSIXの正規表現について
・manコマンドで表示されるマニュアルのバージョン、と実際のバージョンは必ず一致するとは限らない
PHP
PHPで使える正規表現
3種類ある
・PCRE(preg_**関数)
・mberegex(mb_ereg_**関数)
・POSIX(ereg_**関数)
PCRE
デリミタ
・正規表現を、スラッシュ (/) などのデリミタで囲う必要がある
※デリミタは正規表現ではなく、PCRE 系の関数で正規表現を扱う際に必要なもの
・正規表現について質問です。普段PHPを使っています
mberegex
PHP の正規表現があまりに複雑なのでまとめてみた
PHP の mbstring に関するメモ
ereg_replaceとmb_ereg_replaceの仕様的な違い
mb_ereg_replaceについて
ereg_matchとpreg_matchの違いについて教えて下さい。
POSIX Regex
PHP 5.3.0 以降、POSIX 正規表現 拡張モジュールは非推奨となりました
・警告 この機能は PHP 5.3.0 で 非推奨 となり、 PHP 7.0.0 で 削除 されました。
・正規表現
.NET Framework
正規表現エンジン
System.Text.RegularExpressions.Regex オブジェクトによって表される
公式ドキュメント
Microsoft Docs
・.NET Framework の正規表現
・正規表現での文字クラス