Regex 正则表达式来匹配以y或z结尾的单词,但两者都不匹配

Regex 正则表达式来匹配以y或z结尾的单词,但两者都不匹配,regex,Regex,我正在寻找一个正则表达式,它匹配以y或z结尾的单词,但不能同时匹配这两个单词 以下是一些测试用例: fez day fyyyz fyyzy 匹配fez 匹配日期 不匹配,因为它以yz 不匹配fyyzy,因为它以zy 我试过这个正则表达式,但它不起作用 [yz\b] 我使用的正则表达式工具是-您可以使用 \b\w*[yz]\b(?<!yz) /\b(?!\w*(?:yz|zy)\b)\w*[yz]\b/ 它匹配任何以y或z结尾的单词,但不匹配yyz(或(?,而不是以yz或zy结尾的

我正在寻找一个正则表达式,它匹配以y或z结尾的单词,但不能同时匹配这两个单词

以下是一些测试用例:

fez day fyyyz fyyzy
  • 匹配fez
  • 匹配
    日期
  • 不匹配,因为它以
    yz
  • 不匹配
    fyyzy
    ,因为它以
    zy
我试过这个正则表达式,但它不起作用

[yz\b]

我使用的正则表达式工具是-

您可以使用

\b\w*[yz]\b(?<!yz)
/\b(?!\w*(?:yz|zy)\b)\w*[yz]\b/
它匹配任何以
y
z
结尾的单词,但不匹配
yyz
(或
(?,而不是以
yz
zy
结尾的单词)

请注意,方括号内的
\b
不是单词边界,而是与转义序列匹配的退格

图案细节

  • \b
    -前导词边界
  • \w*
    -0+字字符(字母、数字或
    ,可以调整为只匹配字母和
    [^\w\d]*
  • [yz]
    -a
    y
    z
  • \b
    -尾随词边界
  • (?-如果在当前位置之前有
    yz
    字符序列,则会导致匹配失败的负查找

<强> >编辑>强:现在,所有Perl、Python和java标签都被删除,它也可能吸引想要在RigEX> VBA,C++ +Cudio> STD::ReGEX < /Calp><强>(默认的味道是ECMAScript 5),或者<强> JavaScript < /Stigab> >其ReGEX引擎(<强> ECMA-5标准<强> >)的人的注意。不支持lookbehinds,但支持lookaheads

你可以用

\b\w*[yz]\b(?<!yz)
/\b(?!\w*(?:yz|zy)\b)\w*[yz]\b/

详细信息

  • \b
    -前导词边界
  • (?!\w*(?:yz | zy)\b)
    -在找到单词边界后立即执行的负前瞻,如果在0+单词字符之后,后面跟有
    yz
    zy
    ,则匹配将失败
  • \w*
    -使用0+字字符
  • [yz]
    -
    y
    z
  • \b
    -尾随单词边界

如果您的单词长度不是1,请使用:

/\b\w*(?:[^z]y|[^y]z)\b/

如果您也可以使用1个字符的单词,则可以使用此负前瞻正则表达式:

/\b(?!\w*(?:yz|zy)\b)\w*[yz]\b/
\b\w*[yz](?
试试这个。Lookbehind将确保您没有
yz或zy
作为结束。请参阅演示


另一种方式,不向后看:

/\w*(?:[^y]z|[^z]y)\b/

@anubhava:你从哪里得到这个要求的?
,但不是同时得到的。
@vks:没问题-
\b\w*[yz]\b(?)然而,我并不清楚这是什么意思,但并不是两者都在一起。是的,你们都会纠正你们的答案,这将类似于我首先发布的内容:P@vks:现在这是一个猜谜游戏。我按照fez day fyyyz->匹配fez和day,但不是fyyyz,因为它以yz位结束。这不会匹配
y
z
它不匹配单词,仅匹配其结尾。为什么将
yz
zy
放入非捕获组?
(?=
(?@WiktorStribiżew-ahh在几天后回答了……生锈了一点……奇怪的是……尽管第一次尝试是正确的,但没有得到一次投票……:P我猜你已经改变了,但你仍然遵循你的风格-句号和下一句大写字母之间没有空格。@WiktorStribiżew-yeah……再见:)您的规范非常模糊。以下哪项应该匹配:
z
zz
yz
zy
yaz
fizz
flyy
gazza
buzzy
maybly
untyz
bay
bay
如果我理解正确的话,任何在“Z”而不是“YZ”或“Y”结尾而不是在“ZY”中结束的东西是可以的。最新的编辑使这个问题变得清晰。唯一的问题是标签——SAMRIDHIDUBY,请考虑只留下1到2个相关的词。@ WKTROSTRIBIY EW:你在给我写信吗?我没有编辑这个问题。如果你写信给我。无论是谁编辑了标签,你都可以查看编辑历史记录,看看是谁做了更改,并在你的评论中添加一个
@callout
。@Błotosmętek:是的,我也可以做出一个明智的猜测,但OP需要正确定义他的要求,否则我们只能猜测。无论如何,我们仍然不知道单个字符strin是否正确gs
z
y
或以
zz
yy
结尾的字符串应匹配。