• ベストアンサー

【正規表現】コメントアウトされていない文字列のマッチ

お世話になっております。 あるファイル群にgrepをかけて結果を取得したいのですが あと半歩という所でつまづいています。 正規表現の考え方のご示唆をいただけませんでしょうか。 宜しくお願い致します。 ■やりたいこと コメントアウトされていない文字列のマッチ ■対象文字列 1行目:ほげ 2行目://ほげ 3行目:// これは否定 ほげ 4行目:ほげ //ここにコメントがはいるとひっかからない(><) ■コメントアウト文字 // 1行目と4行目の「ほげ」をマッチさせたいのです。 正規表現の先読み否定を使って ^(?!//.*)ほげ$ 行頭から、「//」が後に続かなくて「ほげ」がある行末 とやってるのですが、 4行目がひっかかりません。 (?!//.*)の部分で、「//」から「ほげ」までを否定している為だと思うのですが、どのように考え、どのように記載すればスマートでしょうか。 お忙しい所恐縮ですが アドバイスいただければ幸いです。 宜しくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • ORUKA1951
  • ベストアンサー率45% (5062/11036)
回答No.1

>ほげ$  これだと、"ほげ"の後に文字があるとダメだね。 4行目:ほげ //ここにコメントがはいるとひっかからない(><) だけじゃなく  ほげ  ほげ //  ほげじゃない すべて引っかからないはず。 /(?!\/\/).*ほげ.*$/

Unripe01
質問者

お礼

ご指摘ありがとうございます! 質問の正規表現そのものが間違ってました。お恥ずかしい。 いただいた正規表現で 期待する文字をマッチさせる事ができました。 この場合1文字ずつまっちさせている感じですね。 行マッチさせたい場合は ^(?!//).*ほげ.*$ にて解決です。 ありがとうございました。

その他の回答 (1)

  • airiell
  • ベストアンサー率0% (0/1)
回答No.2

^(?!.*'.*ほげ).*ほげ.*$ とかわいかがでしょうか

Unripe01
質問者

お礼

ありがとうございます! 質問部分の、 「//」から「ほげ」までを否定 ではなく、「ほげ」までを含むことで回避・・・ということですね。 しかしそれだと、  (?!.*'.*ほげ) 部分で、コメントの最後までをマッチした為 ほげ //ほげ がひっかかりませんでした・・・