記事閲覧

− 野ざらし言 −

4374 追記メモ(regex回数指定修飾子)*?+

文太 2014/04/20(Sun) 00:41 [4373]へのコメント
めざらさん、ちょっとメモ書きを残させて下さいね。

 VWXから正規表現に入ったり、そもそも方言でぐちゃぐちゃになってる日本のMS-Dos用各種grepで正規表現を勉強すると、そしてそこで使うと、この区別にどれだけ意味があるのか、という気もしてきますが、正規表現にはBRE (Basic regex)とERE (Expanded regex)という2種類があることになっています。

 で、回数指定の修飾子ですが、

BRE *のみ
ERE *,?,+

 ということになります。(以上、以下の { }は除く)

 もちろん、
* 0回以上のくり返し
? 0回か1回
+ 1回以上のくり返し
 の意味です。

 いえ、BREが*のみというのに驚いたのです。そうだったっけ? と。

 BREを使用するユーティリティは、ed, ex, vi, more, sed, grepなど
 EREを使用するユーティリティは、awk, egrep

 となってます。MS-Dos環境で(Vz環境で)、バニラなgrepを使う人もいないし(たぶん)、serowさんのsedが「+」を通していたりすると(?は駄目だけど)、ほんと、この区別に意味あんのかな、と思ったのでした。
 でも、POSIX 1003.2みたいな規格書(?)で、このBREとEREの区別がしてあるみたいなのですよ。またgrepをegrepとリネームすると、使える正規表現の体系がBRE->EREとスイッチします。sedとawkを同時に勉強した僕は、その頃この違いにとても意識的でした。


>EREの[^:.,]+をBREで表現するには、[^:.,][^:.,]*
>とするのだったと思います……。本当だっけ?

 本当ですし、sedの本にはたぶんいっぱい載ってると思うのですが、serow版を使ってると、[^:.,]+で足りちゃうのですね。だから使う機会がなかった。VWXも同じ。
 でも、逆に今回のように、+が元々EREであることを忘れると、どつぼにはまったりするわけです。onigsed -r(Extended regex)-R(Perl-like regex)というときも、やっぱり、BREとEREは意識されてますね。「\+」があるから便利だけど、やっぱり混乱します。
 なお、onigsedの「\+」、ここの¥のように、BREとEREでは、エスケープ状態がだいたい反転します。BREモードのonigsedが「+」を認めるわけにはいかんのでしょう。

   −−−以上、自分を確認するためのメモでした−−−

http://www.kt.rim.or.jp/~kbk/regex/regex.html
 正規表現の正統な全体像などは、こちらでどうぞ。

関連記事一覧ツリー (▼ を押すとツリー全体を一括表示します)

- 4230.過去ログにありますでしょうか - キャロル 12/10/28-17:44

返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)

おなまえ :
Eメール :
タイトル :
メッセージ: 通常モード(推奨)  整形モード(非推奨)  preモード(空白再現)
※ プログラムコード等を含まない場合は,できるだけ通常モードをご利用ください。

参照先 :
暗証キー: (英数字で8文字以内) プレビューなし


- 以下のフォームから自分の投稿記事を修正・削除することができます -

処理 記事No. 暗証キー