• ベストアンサー

文字列を含まないという正規表現は?

お世話になります。 例えば、文字「a」を含まないという正規表現は、 "[^a]" となりますが、文字列「abc」を含まないという正規表現はどうなりますでしょうか? "[^abc]" ではだめでしたし、 "[^(abc)]" でもだめでした。 また、改行などの制御文字を含めたどんな文字でもいいという正規表現はどうなりますでしょうか? ".*" では改行などが含まれるときはだめでした。 どうかご教授のほどよろしくお願い致します。 次のサイトは参考にしたサイトです。 正規表現の解説 目次 http://www4.ocn.ne.jp/~kaerume/k2e/regex_top.html#mnu_top

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

  • ベストアンサー
  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.2

使っているライブラリや言語によって微妙に違いがありますのでなんともいえないところがあるのですが、 まず、 >文字列「abc」を含まないという正規表現 書けますが、ひじょーに面倒です。 http://www.din.or.jp/~ohzaki/regex.htm#WithoutXYZ に(xyzに対しての)例がありますが 「xyz を含まない文字列」の答は、 ([^x]|x(y?x)*([^xy]|y[^xz]))*(x(y?x)*x?)? となります。 ですので、xyz を含む。というマッチングをしておいて、その結果の真偽を ひっくり返すのがいちばん簡単です。 また、Perl5互換の拡張が有効であれば、 (?!.*abc) で判定できます。 >また、改行などの制御文字を含めたどんな文字でもいいという正規表現はどうなりますでしょうか? >".*" では改行などが含まれるときはだめでした。 これも使っているものによるのですが、Visual Basicのカテゴリにお書きになっているということで .NETの正規表現であると仮定すると、 正規表現コンパイル時のフラグに、Singleline を指定してください。 RegexOptions 列挙体 (System.Text.RegularExpressions) http://msdn.microsoft.com/ja-jp/library/system.text.regularexpressions.regexoptions.aspx >".*"でよいはずですが、"[.\n]"とするとなっています。 ​>http://msdn.microsoft.com/ja-jp/library/cc392020.aspx 前にも同じ間違いをされていたと思いますが、ブラケットの中に . を書いても それは . そのものにしかなりませんよ。

noname#208339
質問者

お礼

sakusaker7さん、 > 「xyz を含まない文字列」の答は、 > ([^x]|x(y?x)*([^xy]|y[^xz]))*(x(y?x)*x?)? こんなに大変だとは思いませんでした。 おかげさまでプログラムが組めそうです。 ありがとうございました。

その他の回答 (1)

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.1

>文字列「abc」を含まないという正規表現 これは Not(「abc」を含む)という感じで処理しないと無理です。 (「abc」を含む )は"(?=abc)"です。結果のTrue/Falseを反転して 判断します。 >改行などの制御文字を含めたどんな文字でもいい ".*"でよいはずですが、"[.\n]"とするとなっています。 http://msdn.microsoft.com/ja-jp/library/cc392020.aspx

noname#208339
質問者

お礼

nda23さん、 おかげさまでプログラムが組めそうです。 ありがとうございました。