• ベストアンサー

正規表現で特定の文字列以外をマッチさせる

正規表現で『#とアルファベット・数字または_』以外をマッチさせようとしています。(たとえば#hogehogeや#hoge_hoge123) 『』内の条件は、 #\w+ で引っ掛けることができたのですが、『』条件以外でという表現がうまくいきません。 どのようにすればマッチングするでしょうか? #投稿前に確認したのですが、「#\w+」でも前後のアルファベットをひっかけてしまってるようです。こちらの方も添削いただければ幸いです。

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

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.5

>なので、axbf02_4#hogehogedだと、axbf02_4にひっかけるようにしたいのです。 「文字列中に #\w+ があるかどうかわからないが、もしあれば、その部分を除外した残りにマッチしたい」だと、おそらく無理だと思います。まず #\w+ にマッチさせてその部分を削除するしかない。 「文字列中に必ず #\w+ の部分があり、その部分を除外した残りにマッチしたい」も直接は出来ませんが、(.*)#\w+(.*) でマッチさせれば、多くの言語では $1 と $2 等で前の部分と後の部分が参照できます。 「文字列中に必ず #\w+ の部分があり、その前の部分にマッチしたい」だと、Perlの正規表現が使えれば、 .*(?=#\w+) です。

その他の回答 (4)

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.4

まずは、どの処理系での正規表現か、明記してください。 Perl,Ruby,Python,PHP,grep,..などなど、それぞれが別の正規表現を使用しています。また、バージョンでも異なる場合もあります。 >頭に#がつき、その後アルファベット・数字・アンダーバーのいずれかの文字列が来ます。 >なので、axbf02_4#hogehogedだと、axbf02_4にひっかけるようにしたいのです。 頭に#がついてませんが?それとも「頭」とは「行頭」のことではないのですか? 「#\w+」だと #hogehogedの部分にマッチする処理系はあります。

  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.3

「#英数_ 以外の文字が一つでもあればマッチ」であれば、[^#\w] でいいです。 「#英数_ 以外の文字が1文字以上続いた物にマッチ」であれば、[^#\w]+ です。 マッチじゃなくて「#の後に英数_ が続いた物に"マッチしないとき"に何かを実行したい」のであれば、正規表現を使う言語の機能を使って、 if( not ( #\w+ にマッチする) ) { 実行したいこと } です。 >#投稿前に確認したのですが、「#\w+」でも前後のアルファベットをひっかけてしまってるようです。こちらの方も添削いただければ幸いです。 これは具体的にどういう物にマッチするのですか?

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

「正規表現」といってもプログラムによっていろいろなんだけどどれなんでしょうか? そして, 「『#とアルファベット・数字または_』以外」とはどのような意味なんでしょうか? 例えば axbf02_4#hogehoged だったらどうしたいのでしょうか?

hanamogeru
質問者

お礼

回答ありがとうございます。 頭に#がつき、その後アルファベット・数字・アンダーバーのいずれかの文字列が来ます。 なので、axbf02_4#hogehogedだと、axbf02_4にひっかけるようにしたいのです。

  • LOHA
  • ベストアンサー率52% (203/388)
回答No.1

関連するQ&A