以正则表达式模式排除字母

时间:2020-02-18 23:47:36

标签: java regex

我正在尝试为<String>-<String>创建一个正则表达式模式。这是我目前的模式:

(\w+\-\w+)

第一个字符串不允许为“ W”。但是,如果长度超过一个字母,它仍然可以包含“ W”。

例如: W-80->无效 W42-80->有效

如何实现?

2 个答案:

答案 0 :(得分:2)

只需将最后一个字符限制为“除'W'以外的任何其他字符char“。

有两种方法可以做到这一点:

负向后方(易于阅读):

^\w+(?<!W)-\w+$

请参见live demo

交叉点取反(要读取的沉船):

^\w*[\w&&[^W]]-\w+$

请参见live demo

-

问题已经转移。这是一种新方法:

^.+(?<!^W)-\w+

这允许除“ W”之外的所有内容作为第一个术语。

答案 1 :(得分:1)

因此,您的第一个字符串可以是:一个字符,但不能为W或2个以上字符。实现该目标的简单模式是:

([^W]|\w{2,})-\w+

但是这种模式并不完全正确,因为现在它允许在第一部分使用任何字符,但是最初只允许使用\w个字符。因此正确的模式是:

([\w&&[^W]]|\w{2,})-\w+

模式[\w&&[^W]]表示\w字符类中的任何字符,除了W字符之外。