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

时间:2011-03-26 18:43:03

标签: regex

我检查了这个论坛以找到我的问题的答案,但无法找到。专家请帮帮忙。

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

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

我正在检查一个字符串,表示首字母或姓氏,需要以字母开头,并且可以包含( - 或!或'或`或空格)这5个字符中的任何一个字符,如果有第二个字,则。如果一个名字有2个单词,中间有空格则可以。一些例子

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

我的正则表达式传递了所有上述条件但是当名称以任何一个特殊字符结束时失败。例如,如果我给约翰或约翰'或约翰!或约翰`或约翰(最后有s空格)这些都无效,但我的正则表达式无法处理它

有人可以告诉我如何编写条件正则表达式吗?像一个,只有当第二个单词时,正则表达式模式必须允许输入这些特殊字符。

3 个答案:

答案 0 :(得分:1)

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

Name(SpecialName)?

答案 1 :(得分:1)

试试这个

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

您可以在此处在线查看:regexr

第二部分

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

是一个非捕获组,这个组是因为最后?可选。

答案 2 :(得分:-1)

您需要做的是重复文本定义,在标点符号后必须存在1次或更多次。这将有效,但每个名称至少需要2个字符(这似乎是合理的......)

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