正規表現で特定文字列を含まない方法

5月 29th, 2017

正規表現を相変わらず勉強中。

まあまあ慣れてきたのだが、困ったのが「特定文字列を含まない」ケースを一体どうするのか。特定「文字」を含まない、なら「^」が使える。でも文字列だと上手く行かない。

例えば、「ユーザー名変更」や「ユーザー名を変更」にはヒットして欲しいが、「ユーザー名を変更しない」は外して欲しい。

「(?!××)」というのがどうやらそうらしい、というので試してみた。

こんな感じ。

ユーザー名.*変更.*(?!ない)

でも、上手く行かない。他を更に調べたら、「(?!.*Value).*」みたいなのを使えとあった。Valueには外したい文字列が入る。

というわけで、改めて変更。

ユーザー名.*変更.*(?!.*ない).*

・・・やっぱり上手く行かない。ひょっとして、と()の前の「.*」を外してみた。

ユーザー名.*変更(?!.*ない).*

これで無事動いた。でも、尻尾の「.*」は、私の場合、不要な気がする。文中の一部について外したい場合用なのではないかと推定。で、更にこれも外してみた。

ユーザー名.*変更(?!.*ない)

やはりこれでも動く。いまいち理屈は分からないが(こらこら)、とりあえず動いたからいいことにしよう(こうやって誤解したまま進んでしまうんだよなあ・・・)。

関連記事

  1. トイレに行くのが嫌な理由
  2. Windows spotlightで画像が変わらない時
  3. 時刻の差分を計算したい
  4. classの中身は即実行されるらしい
  5. クラスの継承を試してみた

Comments are closed.