如何使用正则表达式给定目视范围,例如^(?=(。* [a-z]){1,3})(?=。* [0-9])。{2,5} $

时间:2018-07-29 05:20:16

标签: java regex regex-lookarounds lookahead

Question-
1]String length is 2 to 5 
2]String contains at least 1 char and maximum 3 char
3]Atleast one number 

我想使用回头针。 我试过但不起作用 ^(?=(。 [a-z]){1,3})(?=。 [0-9])。{2,5} $

2 个答案:

答案 0 :(得分:1)

尝试使用以下正则表达式

(?=([\\w\\W]{2,5}$))(?=(.*([0-9]){1,}.*))^[^A-Za-z]*[A-Za-z](?!(?:[^A-Za-z]*[A-Za-z]){3})

public static void main(String[] args) {
    String regex = "(?=([\\w\\W]{2,5}$))(?=(.*([0-9]){1,}.*))^[^A-Za-z]*[A-Za-z](?!(?:[^A-Za-z]*[A-Za-z]){3}).*";

    Pattern pattern = Pattern.compile(regex);
    System.out.println(pattern.matcher("AB2").find()); // output true
    System.out.println(pattern.matcher("AB2C").find()); // output true
}

答案 1 :(得分:0)

您可以使用积极的前瞻来断言字符串的长度为2-5个字符,并且至少包含1位数字和1个字符[a-z]。为了确保最多可以包含3个字符,可以使用负号前瞻来断言您没有匹配4次字符。

^(?=[a-z0-9]{2,5}$)(?=.*[a-z])(?=.*[0-9])(?!(?:.*[a-z]){4})[a-z0-9]+$

Regex demo

说明

  • ^断言行的开头
  • (?=[a-z0-9]{2,5}$前瞻性声明2个-5个字符
  • (?=.*[a-z])正向前进以断言1个字符
  • (?=.*[0-9])正向肯定表示1位数字
  • (?!(?:.*[a-z]){4})负向查找不匹配一个字符4次
  • [a-z0-9]+$一次或多次匹配一个字符或一个数字,直到字符串结尾

Demo