てきとうなメモ

本の感想とか技術メモとか

\+とか\?とか\|

\(\)については以前メモしたけども、\+と\?と\|については互換性のためらしい。

sedgrepは.とか*とか[]とかしかサポートしていなかったのだが、Ahoはegrepを開発した時に+や?や|をサポートした。で、grep側もこれを取り込もうとしたんだけども、これまでのコードは当然+や?や|を通常の文字として利用してきたわけで、互換性を保つためには\+や\?や\|をメタキャラクタとして利用しなければならなくなったということ。ソースは「Mastering Regular Expressions」

で、そもそも\+や\|や\?をサポートするのはGNU sedなどで、mac os xに付属しているsedだと対応していない。

$ echo fff | sed -e 's/f\+/hoge/'
fff

この辺りposix的には大丈夫なのかなとちょっと調べると、

9.3.2 BRE Ordinary Characters
...
The interpretation of an ordinary character preceded by a ( '\\' ) is undefined, except for:

The characters ')' , '(' , '{' , and '}'

The digits 1 to 9 inclusive (see BREs Matching Multiple Characters )

A character inside a bracket expression

Regular Expressions

なるほど。バックスラッシュと文字との連続はBRE上どのように解釈しても良いということか