Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 用于SWTOR名称的正则表达式_Regex - Fatal编程技术网

Regex 用于SWTOR名称的正则表达式

Regex 用于SWTOR名称的正则表达式,regex,Regex,我试图构建一个正则表达式来验证SWTOR字符名 它需要遵循以下规则: 以大写字母开头 以小写字母结尾 只有第一个字母是大写,其他所有字母都是小写 长度为3-15个字符 最多可以包含两个撇号(') 最多可包含一个破折号(-) 撇号不能相邻,也不能是破折号(不能是“Jo”“e”或“Jo'-e”) 整个名称只能包含字母、撇号和破折号 到目前为止,这就是我所拥有的满足前4条规则以及第5条、第6条和第8条的部分: ^([A-Z])([a-z'-]){1,13}([a-z])$ 但是我对正则表达式的了解非

我试图构建一个正则表达式来验证SWTOR字符名

它需要遵循以下规则:

  • 以大写字母开头
  • 以小写字母结尾
  • 只有第一个字母是大写,其他所有字母都是小写
  • 长度为3-15个字符
  • 最多可以包含两个撇号(')
  • 最多可包含一个破折号(-)
  • 撇号不能相邻,也不能是破折号(不能是“Jo”“e”或“Jo'-e”)
  • 整个名称只能包含字母、撇号和破折号
  • 到目前为止,这就是我所拥有的满足前4条规则以及第5条、第6条和第8条的部分:

    ^([A-Z])([a-z'-]){1,13}([a-z])$
    
    但是我对正则表达式的了解非常有限,我在试图找出如何添加撇号和破折号周围的附加条件时遇到了困难


    更新:根据richardtallent的反馈/回答添加了规则8以澄清问题。

    好的,让我们依次讨论以下内容:

    第一个字母为大写:

    ^[A-Z]
    
    否定先行断言,确保前面没有两个破折号、任何大写字母、两个连续的撇号、一个破折号和一个撇号,或三个撇号:

    (?!.*(-.*-|''|'-|-'|'.*'.*'|A-Z))
    
    然后我们需要实际匹配中间字符,其中必须有1到13个字符:

    [a-z'-]{1,13}
    
    最后,以匹配小写字母结尾:

    [a-z]$
    
    要获得完整的表达,只需将各个部分组合起来:

    ^[A-Z](?!.*(-.*-|''|'-|-'|'.*'.*'|A-Z))[a-z'-]{1,13}[a-z]$
    
    我假设是Regex的.NET方言,因为您没有指定


    更新:添加了规则8和规则7中我遗漏的部分。

    它不满足所有规则,但这是我完成它所需要的开始。谢谢大家!^[A-Z](?!.-.-.''.'.'.'..'.*.'.'.'.'.'.-.'.'.-.'.'.-.'.')[A-Z'-]{1,13}[A-Z]$不客气!我确定了答案,以满足其余的业务规则。