- ベストアンサー
正規表現のメタ文字としての「)」の理由は?
- 正規表現で使用される「)」(カッコ閉じ)は、他のメタ文字とは異なり、特別な扱いを受けます。
- 「)」を検索するためにはエスケープが必要であり、/)/のようにマッチ演算子を使って検索することができます。
- 一方で、「]」や「}」はメタ文字ではなく、エスケープせずにそのまま使用することができます。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
No2さんのが近いと思いますが、() はその内部に任意の正規表現を書けるからでしょう。 /a)b/ が /a\)b/のように解釈されOKだとして、それを() で囲もうとした途端に破綻します。 /(a)b)/ はどう解釈すれば良いでしょうか?あるいは、このときは /(a\)b)/ と書かないとエラーにしますか?
その他の回答 (3)
- Tacosan
- ベストアンサー率23% (3656/15482)
ちょろっと調べてみると ] や } を「メタ文字」とはしていない資料があったりする.... ちなみに { は微妙な扱いだったりするのが難しいところ.
お礼
ありがとうございます!そう、Camel Bookには(){[しかメタ文字になってないんです。そこからの疑問でした。
- kmee
- ベストアンサー率55% (1857/3366)
詳しく調べたわけではありませんが () は入れ子に使われるので、正規表現の構文解析方法が []や{}と違うからではないか、と思います。 メタ文字としての{}の中には数字、カンマ、特定の文字列しか入りません。 メタ文字[]の中も特殊なのは[や[^の直後の]と [:文字クラス:] があるだけです。 対して、()はいくらでも入れ子にできます。 []や{}のような単純なルールの適用は難しいです。 「この場合は ) は通常の文字」とかいうルールを書きだしていったら、わけわからなくなると思います。
お礼
なるほど!分かってきました。
- adobe_san
- ベストアンサー率21% (2103/9759)
そりゃ簡単な事でんがな! メタ文字の「グループ化演算子」として使われとるからでっせ! http://www.lightship.co.jp/FileVisor6/help/operation/regexp.htm つまりやのぉ~、「(」はグループの始まりやさかい「文字列と認識する。 で、「)」はグループ化演算子の終わりと認識するさかい「文字列では無い」となるんでっせ!
補足
ううん、おっしゃるとおりですが、それだと反復量指定子の終わりを示す「}」や文字クラスの終わりを示す「]」がメタ文字じゃないのがなぜかイマイチわからへんのですが。。
お礼
おおおー!!! これでバッチリわかりました!!!! /(a)b)/、確かにわけわかりませんね。 ありがとうございました!!!!!