• ベストアンサー

正規表現 指定文字列以外の記述法

[^abc] はa,b,c以外という意味ですが、 abcという文字列以外と記述したく、 [^(abc)] というような方法をとりました。 一応動作もしたようですが、この正しい書き方なのか心配です。これでいいのでしょうか? webを探し回ったのですが、指定文字列以外という正規表現の例などがみつからなかったので質問しました。

  • arcsin
  • お礼率46% (194/417)
  • Perl
  • 回答数1
  • ありがとう数5

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

  • ベストアンサー
  • Dpop
  • ベストアンサー率51% (279/544)
回答No.1

はい。問題ありません。 もし、(abc)しか見る必要が無いなら if ($_ !~ m/abc/) { } の様に、!~ で否定をしても良いかも知れません。(Perlの文法の場合。) しかし、(abc)以外にも見るべき式があるのであれば、 [^(abc)] は文法的におかしいということはありません。

arcsin
質問者

お礼

すばやいご回答、ありがとうございます。 安心しました。 >if ($_ !~ m/abc/) { >} なるほど、そういう方法もあるんですね~ 参考にします

関連するQ&A

  • 正規表現 許可文字列 かつ 指定連続文字列の排除

    わかりにくいタイトルで恐縮です。 初歩的な問題かもしれませんが、もう何日も悩み続けており、ヒントでもいただけると助かります。 たとえば、 正規表現にて 英字のみ(1文字以上) という場合は preg_match("/[a-z]+/i",$string) という風にすればいいと思います。 ここで、英字のみ(1文字以上) しかし、abc という連続文字列があれば該当させない、という場合どういう正規表現を作ればいいのでしょうか? preg_match("/[a-z^(abc)]+/i",$string) みたいなヘンテコなものを作ってみたりしてみたのですが、文法違いなのか、やはり正常には動いてくれません。 ([^a][^b][^c]) なんていうのも違いますし。 狙いは、文字列の最初でも最後でも途中でも、指定文字以外や指定連続文字列がある場合は、エラーを出す、というようなものにしたいのです。 なにかヒントいただければと思います。

    • ベストアンサー
    • PHP
  • 正規表現について教えてください

    正規表現について教えてください。 「①:②:③:④」コロンで区切られた文字列があります。 コロンで区切られた文字列から各コロン間にある文字列を 条件に一致したものを取り出したいのですが 例:①:②:③:④ A000::: :01::: ::AA:: :::BB B001:A1:: B002:99:: C000::ABC01: C000:::BBB01 のように、①②③④の書き方は自由で、最低どこか一つに書かれていて、 ③と④は、両方同時にかかれません。 ここで、③と④のどちらかに入っているのをとりだしたいのですが、 どのように書けばよいでしょうか。 「'.*:.*:[^|:].*:[^|:].*'」としたらダメでした。 「'.*:.*:[^].*:[^].*'」でとりだせたのですが、正しい表現でしょうか。 また、指定したもの、③と④で、 例えば、Aで始まっている、Bで始まっているを 取り出したいのですが上手くいきません。 '.*:.*:[^](A|B).*.*:[^](A|B).*' '.*:.*:[^].*(A|B).*.*:[^].*(A|B).*' '.*:.*:(A|B)[^(A|B)].*:(A|B)[^(A|B)].*' としてみたのですが、表示されません。 お願いします。

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

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

  • 正規表現で特定の文字列に一致しない条件の指定

    正規表現で特定の文字列(2文字以上)に一致しない場合の条件指定は可能でしょうか? 例えば、[^CEG] と指定すると文字の「C」、「E」、「G」以外の文字にマッチするということになりますが、 複数の文字で構成された文字列で同じようなことをする方法はないのでしょうか? 例えば、「Japan」を含まないなどの指定方法を知りたいです。 以下の場合、文字列の途中に含まれている「Japan」を上手く見つけることができ、 1を除外し2と3だけがマッチする正規表現の指定方法が知りたいです。 1. 「この国はJapanです。」 2. 「この国はChinaです。」 3. 「この国はUSAです。」

  • PHP 正規表現による文字列の抜き出しについて

    PHP 正規表現による文字列の抜き出しについて 初歩的な質問で申し訳ありません。いくつかググったのですが、それでも自分の求める形を見つけられず質問させて頂きました。 「あいうえおかきくけこさいすせそ $abc12345678 $99999 たちつてと」 このような文字列の時に、 『$abcで始まって半角スペースで終わる所までの部分を抜き出す』には、 どのように記述すれば宜しいでしょうか。 (上記の文字列の場合は、「$abc12345678」を抜き出したいことになります。) よろしくお願いします。

    • ベストアンサー
    • PHP
  • 「abcで始まらない」を正規表現で表記すると?

    abcで始まらない任意の文字列 これを正規表現で表現するにはどのように書けばいいのでしょうか? 正規表現勉強したてでイマイチ使い方がわかりません。 [^a][^b][^c].* とやってみたのですが、うまくいきませんでした。

  • ASCII文字列以外を検出する正規表現

    ASCII文字列(半角英数・記号)以外を検出する正規表現を教えてください。 WEBで検索したのですが探し方が悪いのか見つかりませんでした。

  • 正規表現でマッチさせたい文字列の指定方法

    正規表現でマッチさせたい文字列の指定方法について こんにちは。正規表現について教えてください。 秀丸エディタでgrepする時に先頭行に 『ファイル名(行数): 』という文字列が 先頭行に入りますが、これを正規表現を使用して消したいと思っています。 具体的には以下のような表現ですが、どのように指定するのが正しいでしょうか。 いくらかテストしているのですが、なかなかうまくできず困っています。 消したい文字列 test.log-110411-01.bak.text(38): よろしくお願いします

  • 正規表現で以下の場合はどのようにすればよいのでしょうか?

    正規表現で以下の場合はどのようにすればよいのでしょうか? 条件)文字列は英数字と-は許すが文字列内のどこかに-が連続している場合はNGとする。 例) abCd-012 ○ ABC--012 × A-B-C-D- ○

    • ベストアンサー
    • Java
  • (秀丸)正規表現で、特定文字列含む<~>範囲を選択

    お世話になります。 (秀丸の)正規表現について教えてください。 たとえば、テキストファイルに、1行、 ”<abc>文字列1です><abc>文字列2です><abc>文字列3です>(ここで改行)” という文字列が存在しています。 それを対象として、 (秀丸の)正規表現を利用し、 ”<abc>文字列2です>”だけをマッチさせたいのですが、 試しに、(秀丸の)正規表現で、 <abc.*文字列2.*?>  ←(なお、実際の記号は半角(.*?等)で、それぞれ入力しています・・・) で検索実行したところ、 ”<abc>文字列1です><abc>文字列2です>” として、 前の方に、マッチして欲しくない、 ”<abc>文字列1です>” までがマッチしてしまっている状況です。 そこでご質問なのですが、 上記におきまして、(秀丸の)正規表現を利用して、 ”<abc>文字列2です>”だけをマッチさせるには、 どのようにすれば、よろしかったでしょうか? (ちなみに秀丸は、2013年12月10日(火)現在の  最新バージョンVer8.32を利用しています) 以上になります。 宜しくお願いいたします。

専門家に質問してみよう