◀一般トップへ
  • 6621 正規表現について お教えください
    • 6622 正規表現の文字クラスで質問
    • 6623 Re:正規表現について お教えください
      • 6627 Re2:正規表現について お教えください
  • [6621] 正規表現について お教えください Ki 2008年03月15日 15:36

    いつもながら正規表現に不安を覚える初心者です。
    ファイルからGrepでfor a whileを検索しました。
    for a whileの後に、ピリオド、カンマ、?や半角スペースの続くものを調べようとしました。
    for a while[\.\,\?\s]と、for a while[.,? ]の入力結果が同じでした。.,?半角スペースの前に\をつけなくてもよいのでしょうか。
    • [6622] 正規表現の文字クラスで質問 じゅうじ 2008年03月15日 18:25

      ▼ Kiさん
      \sは、半角スペース、タブ、改行にマッチします。
      []で囲まれた範囲を文字クラスまたはキャラクタクラスと呼ぶようです。
      文字クラスの中は、たいてい¥記号でエスケープしていません。
      ^と[-]は、文字クラスの中でエスケープするのは当然として、
      bとwWsSdDなどはエスケープすると本来の1文字とは異なる意味になるようです。

      参考:http://www.harukaze.net/~mishima/perl/man/perlre.1.html
    • [6623] Re:正規表現について お教えください 神楽 2008年03月15日 23:43

      ▼ Kiさん
      > いつもながら正規表現に不安を覚える初心者です。
      > ファイルからGrepでfor a whileを検索しました。
      > for a whileの後に、ピリオド、カンマ、?や半角スペースの続くものを調べようとしました。
      > for a while[\.\,\?\s]と、for a while[.,? ]の入力結果が同じでした。.,?半角スペースの前に\をつけなくてもよいのでしょうか。

      文字クラス内のエスケープシークエンスに悩むよりも
      for a while(\.|,|\?| )
      for a while(\.|,|\?|\s)
      のように書いた方がわかりやすいかもしれません
      (カンマは正規表現の特殊文字ではないためエスケープしなくても構いません)。

      なお\sは、半角スペース、タブ、改行以外にも、垂直タブと改ページにもマッチしますが、
      キーボードから直接入力できる文字ではないため通常は意識する必要はないでしょう。
      • [6627] Re2:正規表現について お教えください Ki 2008年03月20日 23:52

        ▼ 神楽さん
        > ▼ Kiさん
        > > いつもながら正規表現に不安を覚える初心者です。
        > > ファイルからGrepでfor a whileを検索しました。
        > > for a whileの後に、ピリオド、カンマ、?や半角スペースの続くものを調べようとしました。
        > > for a while[\.\,\?\s]と、for a while[.,? ]の入力結果が同じでした。.,?半角スペースの前に\をつけなくてもよいのでしょうか。
        >
        > 文字クラス内のエスケープシークエンスに悩むよりも
        > for a while(\.|,|\?| )
        > for a while(\.|,|\?|\s)
        > のように書いた方がわかりやすいかもしれません
        > (カンマは正規表現の特殊文字ではないためエスケープしなくても構いません)。
        >
        > なお\sは、半角スペース、タブ、改行以外にも、垂直タブと改ページにもマッチしますが、
        > キーボードから直接入力できる文字ではないため通常は意識する必要はないでしょう。

        じゅうじさん、神楽さん
        本当にありがとうございます。
        初心者にはカンマもエスケープした下記の形式が覚えやすいように思いました。はやく自信を持って使いこなせるようになりたいものです。
        for a while(\.|\,|\?|\s)
        御礼