- ベストアンサー
【正規表現】コメントアウトされていない文字列のマッチ
お世話になっております。 あるファイル群にgrepをかけて結果を取得したいのですが あと半歩という所でつまづいています。 正規表現の考え方のご示唆をいただけませんでしょうか。 宜しくお願い致します。 ■やりたいこと コメントアウトされていない文字列のマッチ ■対象文字列 1行目:ほげ 2行目://ほげ 3行目:// これは否定 ほげ 4行目:ほげ //ここにコメントがはいるとひっかからない(><) ■コメントアウト文字 // 1行目と4行目の「ほげ」をマッチさせたいのです。 正規表現の先読み否定を使って ^(?!//.*)ほげ$ 行頭から、「//」が後に続かなくて「ほげ」がある行末 とやってるのですが、 4行目がひっかかりません。 (?!//.*)の部分で、「//」から「ほげ」までを否定している為だと思うのですが、どのように考え、どのように記載すればスマートでしょうか。 お忙しい所恐縮ですが アドバイスいただければ幸いです。 宜しくお願い致します。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>ほげ$ これだと、"ほげ"の後に文字があるとダメだね。 4行目:ほげ //ここにコメントがはいるとひっかからない(><) だけじゃなく ほげ ほげ // ほげじゃない すべて引っかからないはず。 /(?!\/\/).*ほげ.*$/
その他の回答 (1)
- airiell
- ベストアンサー率0% (0/1)
^(?!.*'.*ほげ).*ほげ.*$ とかわいかがでしょうか
お礼
ありがとうございます! 質問部分の、 「//」から「ほげ」までを否定 ではなく、「ほげ」までを含むことで回避・・・ということですね。 しかしそれだと、 (?!.*'.*ほげ) 部分で、コメントの最後までをマッチした為 ほげ //ほげ がひっかかりませんでした・・・
お礼
ご指摘ありがとうございます! 質問の正規表現そのものが間違ってました。お恥ずかしい。 いただいた正規表現で 期待する文字をマッチさせる事ができました。 この場合1文字ずつまっちさせている感じですね。 行マッチさせたい場合は ^(?!//).*ほげ.*$ にて解決です。 ありがとうございました。