是否有一种方法可以仅在与Or结构的某个项匹配时才在该项之前包含空格?这些项目可以在字符串中重复。
正则表达式:
^([A-ZÁÂÉÊÍÓÔÚ][a-záãâéêíóõôúç]+)([(e|da|das|de|do|dos)]*[s][A-ZÁÂÉÊÍÓÔÚ][a-záãâéêíóõôúç]+)+$
其中一项之前的空格(必填(:[(e|da|das|de|do|dos)]
我想要的结果:
Paulo César Oliveira
(这是有效的(Antonio Carlos da Silva
(在"da"之前必须有一个空格(João da Silva dos Santos e Souza
您可以使用
^p{Lu}p{Ll}+(?:(?:s(?:e|d(?:[ao]s|[aeo])))?sp{Lu}p{Ll}+)+$
^[A-ZÁÂÉÊÍÓÔÚ][a-záãâéêíóõôúç]+(?:(?:s(?:e|d(?:[ao]s|[aeo])))?s[A-ZÁÂÉÊÍÓÔÚ][a-záãâéêíóõôúç]+)+$
请参阅regex演示。正则表达式引擎可能不支持p{Lu}
和p{Ll}
,请继续使用您的字符类。
详细信息:
^
-字符串的开头p{Lu}p{Ll}+
-后面跟着一个或多个小写字母的大写字母(?:(?:s(?:e|d(?:[ao]s|[aeo])))?sp{Lu}p{Ll}+)+
-出现一次或多次以下模式:(?:s(?:e|d(?:[ao]s|[aeo])))?
-可选出现:s
-a空白(?:e|d(?:[ao]s|[aeo]))
-e
或d
,然后是os
/as
或a
、e
、o
s
-a空白p{Lu}p{Ll}+
-后面跟着一个或多个小写字母的大写字母
$
—字符串结束