Regex 正则表达式来匹配以y或z结尾的单词,但两者都不匹配
我正在寻找一个正则表达式,它匹配以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结尾的
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]
-ay
或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是否正确gsz
和y
或以zz
或yy
结尾的字符串应匹配。