• ベストアンサー

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

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

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

  • ベストアンサー
  • nda23
  • ベストアンサー率54% (777/1416)
回答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