正規表現のどの部分がオプションで、どれが逐語的に一致する必要があるかを尋ねる価値があります。
^([A-Z][A-Za-z.'\- ]+) ([A-Z][A-Za-z.'\-]+)$
* * *
星印の部分は一致している必要があります。すべての一致には、行頭、行末、およびスペースが含まれている必要があります。他の部分がどのように一致するかを考えて[A-Z][A-Za-z.'\-]
、名前の文字を呼びましょう.
^([A-Z][A-Za-z.'\- ]+) ([A-Z][A-Za-z.'\-]+)$
------------------- ------------------
1 2
1
これらの少なくとも 1 つが存在する限り、名前の文字とスペースの任意のシーケンスに一致できます。 2
名前の文字のいずれかに一致します。この抽象化レベルで見ると、正規表現は次のようになります。
{beginning of line}
{one or more (name characters or space)}
{space}
{one or more (name characters)}
{end of line}
この正規表現が一致できる唯一の方法
David Taylor Gator
です
{beginning of line} ^
{one or more (name characters or space)} "David Taylor"
{space} " "
{one or more (name characters)} "Gator"
{end of line} $
文字列には 2 つのスペースしかないため、他に考えられることは次のとおりです。
{beginning of line} ^
{one or more (name characters or space)} "David"
{space} " "
{one or more (name characters)} "Taylor Gator" XXX
{end of line} $
"Taylor Gator" にはスペースがありますが、{one or more (name characters)}
スペースを許可しないため、これは一致しません。