【发布时间】:2019-07-20 05:07:36
【问题描述】:
如果下一个符号不是y,如何标记xy?
我有四个字符串:
1.zxyy
2.zxyz
3.zxy
4.xy
表达式应标记字符串 2-4。
此正则表达式仅标记第二个字符串:
([x][y])(?=[^y])
谢谢。
【问题讨论】:
-
使用否定的类使用否定的前瞻而不是肯定的前瞻。这样你就不需要匹配不是
y的字符,你只需要不匹配y -
你的正则表达式说“匹配 xy,如果它后面跟着不是 y 的东西”。相反,它应该说“如果 xy 后面没有 y,则匹配 xy”,即使 xy 后面没有任何内容,它也可以工作。您当前使用的是正向预读 (
(?=...)),应该改用负预读 ((?!...))。 -
附带说明,没有理由将 x 和 y 字符放在字符类中,
xy将匹配与[x][y]相同的内容,并且更具可读性和更易于编写。 -
@jhnc,好的,这个
(x)(y)(?!y)有效,谢谢! -
顺便说一句,
xy(?!y)可能就足够了。(capturing groups)在您想要提取匹配内容的一部分时很有用,但在这里您的两个组的内容将始终为“x”和“y”。
标签: regex