Java Regex:只允许某些字符,但不允许某些字符开始字符串?

时间:2016-11-04 06:03:10

标签: java regex string

我正在摆弄Java正则表达式,我试图提出一种模式,允许在其他任何地方使用某些字符,但它不能以允许的某些字符开头集。

例如,让我们说允许的字符是从A到Z,但字符串不能以X或Z开头。我该怎么做?我提出了size,虽然它起作用,但它允许字符串以不在集合中的其他字母开头(例如标点符号)。

2 个答案:

答案 0 :(得分:5)

您可以使用此正则表达式:

^[A-WY][A-Z]*$
  • ^[A-WY]确保第一个字符为A-WY
  • [A-Z]*$将匹配0或更多任何大写英文字母

通常要排除某些字符,您也可以使用否定预测:

^(?![XZ])[A-Z]+$

(?![XZ])在开始时不允许XZ为负面预测。

答案 1 :(得分:1)

Java正则表达式支持字符类中的减法;请参阅http://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html,其中显示了这些示例:

[a-z&&[^bc]]    a through z, except for b and c: [ad-z] (subtraction)
[a-z&&[^m-p]]   a through z, and not m through p: [a-lq-z](subtraction)

所以你可以说

[A-Z&&[^XZ]]

表示除X或Z之外的任何大写ASCII字母。这里真的不需要它,但是如果你使用像Posix字符类这样的大类,它可能会更有用。

警告:并非所有语言都支持regex中的此构造。我非常确定C ++和Javascript没有,我实际上并不知道另一种语言,但我还没有检查过。