正则表达式匹配以X开头的两段字,并且如果第二段以Y结尾,则仅匹配第一段

时间:2015-02-05 07:28:46

标签: regex

我正在编写一个正则表达式,它将匹配以X开头的两段字段。如果第二段不以Y结尾,它将匹配两个段,但如果第二段结束时匹配第一段收率

例如,

XJohn.Doe -> matches XJohn.Doe
XJane.DoeY -> matches XJane (or XJane.)
ZJanie.Doe -> not match

到目前为止我所得到的是

X[A-z]+?\.[A-z]+(?<!Y)$

XJane.DoeY 完全不匹配,或

X[A-z]+?\.[A-z]+(?<!Y)

匹配 XJane.Doe

如何修改正则表达式,以便在匹配失败时,它会尝试仅匹配第一个段。

2 个答案:

答案 0 :(得分:2)

您可以尝试下面的内容,

^X[A-Za-z]+\.(?:[A-Za-z]+(?<!Y)$|)

如果您想要匹配+等字符串,请将X[A-Za-z]+中的*更改为X.X

DEMO

<强>更新

^X[A-Za-z]+\.(?:[A-Za-z]+(?<![\WY])$|)

DEMO

答案 1 :(得分:1)

您可以根据字边界使用此正则表达式:

\bX\w*\W+(?:\w*[^Y\W])?\b

RegEx Demo


编辑:根据以下评论,以下正则表达式可以正常工作:

\bX\w*(?:\W+\S*[^!\s](?=\s|$))?

RegEx Demo 2