Regex 如何使正则表达式模式的某些部分有条件?

Regex 如何使正则表达式模式的某些部分有条件?,regex,Regex,我在这个论坛上查找我的问题的答案,但找不到。请专家们帮忙 我在验证字符串时遇到问题,请说出我的名字。我得到了一组字符串需要遵守的规则,同样的规则需要用正则表达式确认。我写了一个模式。除了一条规则,我的模式尊重其他一切。我在下面列出我的正则表达式模式 ([A-Za-z]+[-'!` ]?)* 我正在检查一个字符串,比如first或last name,该字符串需要以字母表开头,并且可以有(-or!or’or ` or`或空格)这5个字符中的任意一个,并且只有在有第二个单词的情况下才可以。如果一个名

我在这个论坛上查找我的问题的答案,但找不到。请专家们帮忙

我在验证字符串时遇到问题,请说出我的名字。我得到了一组字符串需要遵守的规则,同样的规则需要用正则表达式确认。我写了一个模式。除了一条规则,我的模式尊重其他一切。我在下面列出我的正则表达式模式

([A-Za-z]+[-'!` ]?)*
我正在检查一个字符串,比如first或last name,该字符串需要以字母表开头,并且可以有(-or!or’or ` or`或空格)这5个字符中的任意一个,并且只有在有第二个单词的情况下才可以。如果一个名字有两个单词,中间有一个空格,那么就可以了。一些例子

List of Valid Names
TIMOTHY
JONATHON
PATRICK
B`ELLA
SUZY JANE - Only one space allowed
SUZY-JANE

List of Invalid Ones
T~ELLA - Because this ~ is not part of regex
SUZY - JANE - No space allowed between hyphens
SUZY  JANE - 2 spaces betweeb words not allowed
GRACO&LAME - & is not allowed
我的正则表达式通过了上述所有条件,但当名称以任何一个特殊字符结尾时失败。例如,如果我给约翰-或约翰'或约翰!或者JOHN`或者JOHN(结尾有s空格)这些都是无效的,但是我的正则表达式无法处理它


有人能告诉我如何编写条件正则表达式吗?与第一个一样,并且只有在有第二个单词时,正则表达式模式才能允许输入这些特殊字符。

您需要做的是重复文本定义,使其在标点符号后存在一次或多次。这将起作用,但每个名称至少需要2个字符(这似乎是合理的…)


[A-Za-z]+[-'!`]?[A-Za-z]+

让Name作为简单名称的正则表达式,特殊字符集(包括空格)。那么你最后的正则表达式看起来像

Name(SpecialName)?
试试这个

[A-Za-z]+(?:[-'!` ]?[A-Za-z]+)?
您可以在此处在线查看:

第二部分

(?:[-'!` ]?[A-Za-z]+)? 

是一个非捕获组,此组是因为结尾处的
是可选的。

这与空字符串以及“a-za-za-z”匹配。哦,我复制并粘贴了他的原件,并保留在()*。取出,现在应该可以用了。我正在分别验证名字和姓氏。如果我将名字和姓氏作为一个字符串进行验证,那么您的解决方案是完美的。在我的例子中,名字本身可以有多个字符串。因此,我不能强制要求使用第二个字符串。这适用于单个字符串。。它至少需要两个字符。“De”将验证为真。@Ingo-很抱歉,我不清楚如何解释您的答案。Name=[A-Z]+Special=[!-]Regex=[A-Z]+([!-][A-Z]+)?@Ingo-现在尝试您的解决方案如果“-”是一个特殊字符,它必须是字符类中的第一个。这就是为什么我给出了一个象征性的回答,我希望你能插入你以前的值。@Ingo-这里是-[a-Za-z]+([!-'```]?[a-Za-z]*)?苏西·简这次失败了