• 締切済み

正規表現について

下記期待する結果通りになる正規表現を考えておりますが、 うまくいきません。教えて下さい。 期待する結果 hoge(fuga sumomo) マッチする hoge(foo(sumomo)) アンマッチする sumomoが()で囲われている hoge(bar()sumomo) マッチする 作成した正規表現 hoge\([^(]*sumomo[^)]*\) 実際の結果 hoge(fuga sumomo) マッチ hoge(foo(sumomo)) アンマッチ hoge(bar()sumomo) アンマッチ ←予想と違う

みんなの回答

  • kkk1024
  • ベストアンサー率33% (42/127)
回答No.3

こんばんは。 正規表現 hoge\(.*([^\(]sumomo)\) で、一応質問内容の期待する検索結果にはなりました。 秀丸の検索で試してみました。 ただ、 >hoge() の()中にsumomoがいる >hoge内の()でsumomoは()に囲まれなていない の条件とは表現が異なるので、質問者様の使い方によるところが大きいですが。 使い方、目的を明示していただければ、別の回答もついたと思います。 参考になれば幸いです。

cybert
質問者

補足

>使い方、目的を明示していただければ、別の回答もついたと思います。 失礼しました。 使い方と目的はソースコードのチェックです。 変数sumomoが関数hogeの引数の時、何か他の関数fugaの引数になっているかのチェックです。 変数sumomoと関数hogeは固定値で、何か他の関数は任意です。 kkk1024様の方法で、一先ずやりたいことが出来たので 他の方のご回答がなければ、Closeしようと思います。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

どういう事情で「そのような正規表現が必要なのか」がわからないのですが, 真面目な話として「1つの正規表現で書くことはやめた方がいい」と思いますよ. 多分, 読めないものしか出てこないと思う. ぶっちゃけ (Perl 的に) /hoge\(.*sumomo.*)/ && ! /\(sumomo\)/ の方がよほど読みやすい. ああ, 「括弧がちゃんとしている」というのは正規表現で書けないです. 念の為.

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

その 2つにマッチさせるだけでいいのなら hoge\(fuga sumomo\)|hoge\(bar\(\)sumomo\) でいいのでは (苦笑). マッチ/アンマッチを決める規則が明確になってればそれに応じて書けるかもしれない (し書けないかもしれない) んだけどねぇ.

cybert
質問者

補足

申し訳ないです。説明不足。 シックスセンスで伝わるかと思いましたが断念。 補足です。 fuga foo bar は任意文字列です。 hoge sumomo は固定文字列です。 やりたいことは、 hoge() の()中にsumomoがいる hoge内の()でsumomoは()に囲まれなていない です。 最速の回答有難うございます。

関連するQ&A