「お昼の放送」の思い出

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

123 xyz

の文字にもマッチしていまいます。行頭がxyzで続く文字列以外にマッチさせる正規表現はどうかけばよろしいでしょうか?

A 回答 (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 …
    • good
    • 2

^[^x]?[^y]?[^z]?


じゃないですかね?この式だと、

x
xy

という行にもマッチします(xyzじゃない行ですから、マッチすべき)。それがいやなら、次の式になります。実はクエスチョンマークを消しただけです。

^[^x][^y][^z]

^[^xyz]だと、行頭がx,y,zのいずれでもないという意味になりますから、xyzと言う行だけでなく、yまたはzで始まる行もマッチしません。
    • good
    • 0

「行頭がxyzである」は、「行頭から、1文字目がx かつ 2文字目がy かつ 3文字目がz である」ということで、正規表現は ^xyz になります。



一方、「行頭がxyzでない」は、「行頭から、1文字目がx以外 または 2文字目がy以外 または 3文字目がz以外」ということですので、
これを正規表現にすると、^([^x]|.[^y]|..[^z]) となります。

…とまあ、結構ややこしいことになるので、
  「行頭がxyzである」にマッチしなかったら、
という条件で処理した方が簡単でしょう。
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報