Стоит спросить, какие части регулярного выражения являются необязательными и какие должны быть сопоставлены дословно.
^([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
может соответствовать любой последовательности символов имени и пространства, до тех пор, пока есть по крайней мере один из них. 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} $
Другая вещь, которую можно было бы рассмотреть , поскольку в строке всего два пробела:
{beginning of line} ^
{one or more (name characters or space)} "David"
{space} " "
{one or more (name characters)} "Taylor Gator" XXX
{end of line} $
но это не совпадение, потому что у «Тейлора Гатора» есть пробел, но {one or more (name characters)}
не позволяет пробел.
В первой части есть пробел. Это проблема. –
Если первая часть захватила все, после этого не было бы никакого обязательного места и одного или нескольких символов. –
Это также откат. Так что это началось бы с захвата всего. Затем отступите, пока он не удовлетворится. –