• ベストアンサー

正規表現。行頭が○○以外にマッチさせたい。

正規表現を勉強しています。行頭がxyzという文字列以外をマッチさせたいと思っています。行頭にマッチさせるには"^xyz"と理解できます。[^xyz]とやるとx,y,z以外の文字列にマッチするのもわかります。ただ、これだと 123 xyz の文字にもマッチしていまいます。行頭がxyzで続く文字列以外にマッチさせる正規表現はどうかけばよろしいでしょうか?

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

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

パターンを使うんでしょうね。 → ^(?!xyz) Excelマクロでの実験プログラム Dim A, P$ Set A = CreateObject("VBScript.RegExp") A.Global = True A.IgnoreCase = True P = "^(?!xyz)" A.Pattern = P Debug.Print A.Test("xyz123") '★(1) Debug.Print A.Test("123xyz") '★(2) (1)先頭が「"xyz"以外」という条件に反するのでFalse (2)先頭が「"xyz"以外」という条件に合うのでTrue http://msdn.microsoft.com/ja-jp/library/cc392020.aspx

その他の回答 (2)

noname#194317
noname#194317
回答No.2

^[^x]?[^y]?[^z]? じゃないですかね?この式だと、 x xy という行にもマッチします(xyzじゃない行ですから、マッチすべき)。それがいやなら、次の式になります。実はクエスチョンマークを消しただけです。 ^[^x][^y][^z] ^[^xyz]だと、行頭がx,y,zのいずれでもないという意味になりますから、xyzと言う行だけでなく、yまたはzで始まる行もマッチしません。

  • mtaka2
  • ベストアンサー率73% (867/1179)
回答No.1

「行頭がxyzである」は、「行頭から、1文字目がx かつ 2文字目がy かつ 3文字目がz である」ということで、正規表現は ^xyz になります。 一方、「行頭がxyzでない」は、「行頭から、1文字目がx以外 または 2文字目がy以外 または 3文字目がz以外」ということですので、 これを正規表現にすると、^([^x]|.[^y]|..[^z]) となります。 …とまあ、結構ややこしいことになるので、   「行頭がxyzである」にマッチしなかったら、 という条件で処理した方が簡単でしょう。

関連するQ&A

  • 正規表現 秀丸エディタ 行頭から8文字を残し後ろを

    秀丸エディタで、置換えをしてます。 正規表現で、行頭から 8文字を残して、後ろの文字を全部削除させたいのですが。 行頭の8文字以外がどうしてもマッチしてくれません。 [^(^........)] [^(^.)]{8} 行頭の8文字は、数字、英字、記号です。 どうぞよろしくお願いします。

  • [15]にマッチする正規表現

    [15]にマッチする正規表現 [15] にマッチする正規表現を書きたいのですが、うまくいきません。。。。 簡単だ、と思ったのですが。。。 expr "$DATA1" : .*\[15\].* と書くと、中の数字が15じゃなくてもマッチしてしまいます。 expr "$DATA1" : .*15.* であれば"15"にマッチしますが、対象の文字列の都合上、カッコでも識別する必要があり 困っております。[と]をエスケープする目的で\をつける、と思っているのですが、何か 思い違いをしているのでしょうか。

  • 「マッチしない」正規表現の書き方

    正規表現について、おたずねします。 文字列 abc,def,ghi のいずれかにマッチする正規表現は (abc|def|ghi) ですよね。 それでは、「abc,def,ghi のいずれにもマッチしない」正規表現は、どう書けばいいのでしょうか? あちこち調べましたが、どうしてもわかりません。 ただし、if $a =~ /(abc|def|ghi)/ などで、=~ を !~ に直す、というのはナシです。あくまでも右辺の式の中で表現したいのですが…

  • 正規表現を教えてください。

    正規表現を教えてください。 C#で正規表現を用いた文字列検索を勉強中なのですが、うまくマッチさせることができません。教えていただけないでしょうか。 検索対象の文字列は下のようになります。 キーワード;値; 文字列中に該当するキーワードが存在する場合に、その値を取得するプログラムを考えています。しかし、私の正規表現では2つ目の「;」を検出してしまい、キーワードのみを取得することが出来ずに困っています。 見当違いの表記をしているとは思うのですがどなたかお助けください。 match = Regex.Match(line, "^(.*);"); C#初心者なものです。

  • 正規表現で特定の文字集団以外の文字列があるとマッチする書き方

    正規表現で特定の文字集団以外の文字列があるとマッチするというものです。"ABCDEFGHIJK0123456789"以外の文字が1つでもあればそれにマッチし、$1,$2...にそれらを格納する書き方が知りたいです。 たとえば、 "ACKL1-BZaF" なら、マッチして、そして $1にL $2に- $3にZa あと、正規表現の真髄は、よくNFA,DFAの違いがわかれば良いなど書いていますが、身近にこの違いがはっきるわかる事例ってありますか?

  • 正規表現で括弧にマッチさせたいのですが・

    Javaで正規表現を使おうとしてるのですがうまく行きません。 次のようにマッチさせたいです。 マッチさせたい文字列 : (abc)and(efg) マッチする文字列 : abcとefg マッチさせたい文字列 : (abc(efg)) マッチする文字列 : abc(efg) もしくは abc(efg)とefg とのようにまっちさせたいです。上の方はできたのですが、下の方がabc(efgとマッチしてまうのです。 いい方法を教えてください><お願いします。

  • PHP 正規表現

    はじめまして^^ 現在、PHPでプログラムを作っています。 そして、文字列の置き換えをする機会があり、 正規表現をつかうことになりました!! 置き換えに使う関数は、mb_ereg_replaceです! ある条件にあった部分の文字列を置き換えしたいと思っています。 そして、いろいろとやっていきましたら、あるひとつの壁にぶつかりました。。 例えば、PHPでは、正規表現の部分を [^文字]とやると、『文』と『字』という文字列以外にマッチという意味になるらしいのですが、 『文字』という文字列以外にマッチ、というふうに、表現したい場合は、 どう表現すればよいのですか? [^(文字)]とか、その他いろいろ、 自分なりに、色々ためしたのですが、うんともすんともいいません、、 どなたか、わかる方教えて下さいm(_ _)m

    • ベストアンサー
    • PHP
  • 正規表現  マッチさせれない C#

    下記のもの全体にマッチさせる表現を考えていたのですが、 どぉしても思いつきません。 まだまだ正規表現についてわかっていないのでご教授いただけないでしょうか。 /// <summary> /// メソッド1 /// </summary> /// <param name="Out">1:入力文字,2:出力文字)</param> /// 文字列     の部分は行が増えたり減ったりするので /// と文字列と改行文字で1つのくくりにして それを任意の回数繰り返しでマッチさせようとしています。 ([/// .*] \r\n)*   (///[.<>/]* \r\n)*  など試しましたがマッチしません。 そもそもこのようなものをマッチさせること自体無理なのかもしれませんが その点も含めご教授お願いいただけますでしょうか。言語はC#です

  • 正規表現について

    /^R|ruby$/ 上記のような正規表現があったとします。 この正規表現の【|】の判断がわかりません。具体的には、/^ $/という記述から 対象の文字列の先頭がRかrのどちらかで以降がubyと続く文字列にマッチという 意味だと解釈しているのですが違うのでしょうか? 具体的にはRubyという文字列かrubyという文字列の二つのうちどちらかにしか マッチしないとおもっていたのですが、 rrubyという文字列やRrubyという文字列にもマッチします。そもそもこの場合のR|rの箇所ですが、これはRかrのどちらかが先頭にあり 二文字目からはubyという文字列がつづきますよ。という正規表現ではないのでしょうか? かなりこまっています。 識者のかたご教授ください。

  • Linuxの正規表現について

    Linuxの正規表現について教えてください。 正規表現を使うと、文字列のパターンを表す事ができる。例えば、行頭が「#」で始まる行は____、aもしくはfで始まる三文字の文字列は____となる という問題なんですけど____の部分をだれか教えてください。明日テストなんだけどわからくて… お願いします。

専門家に質問してみよう