我正在尝试从字符串中提取firstname和lastname。用户可以在我的输入中写入以下内容:FirstName,FirstName LastName(有时是全名,有时只有名字)。
这是我的正则表达式,但它并未涵盖所有情况:
preg_match('/^(?<lastName>[^\s]+)[\s](?<firstName>.+)$/', $input, $matches);
此代码适用于以下输入:A B,A B C D E,但不适用于A.
10倍。
答案 0 :(得分:1)
使空格和名字部分可选(注意[\s]
和(?<firstName>.+)
包含在括号中,后跟一个问号):
^(?<lastName>[^\s]+)([\s](?<firstName>.+))?$
...反对&#34; A&#34;抓住这个:
MATCH 1
lastName [0-1] `A`
...反对&#34; A B,A B C D E&#34;这样:
MATCH 1
lastName [0-1] `A`
2. [1-14] ` B, A B C D E`
firstName [2-14] `B, A B C D E`