正则表达式匹配每行仅含x/y其一的问题求助
解决方案
你的核心问题是原正则会匹配所有包含至少一个x或y的行,不管数量多少,而你需要的是仅匹配「不含x/y」或「仅含一个x且不含y」的行(对应示例第3、4行)。
可以用带有负向断言的正则来实现:
^(?!.*y)(?:.*x)?$
正则解释
(?!.*y):负向前瞻断言,确保整行里不存在任何y;(?:.*x)?:匹配两种情况:- 要么是包含任意内容加一个
x的行(对应示例第3行); - 要么是完全不包含
x的行(对应示例第4行,同时因为前面的断言,也不会包含y)。
- 要么是包含任意内容加一个
如果你的真实需求是「允许仅含一个y的行,只要x和y总共只出现0次或1次」,可以用另一个正则:
^(?!.*[xy].*[xy]).*$
这个正则的解释
(?!.*[xy].*[xy]):断言整行里不会出现两个或以上的x/y(不管是两个x、两个y,还是x+y组合);.*:匹配满足上述条件的任意整行。
内容的提问来源于stack exchange,提问作者Ayman
相关产品推荐
相关产品推荐

