繁体   English   中英

正则表达式:如何匹配多个值的确切长度?

[英]Regex: How to match for exact length of multiple values?

如何使用此模式: [A-Za-z0-9]{10}还可以匹配其他文字大小,如:12和25?

我试着让它像:

  1. [A-Za-z0-9]{10|12|25}
  2. ([A-Za-z0-9]){10}|{12}|{25}

但它没有成功。

如果您只需要匹配特定尺寸,则需要使用替换:

^(?:[A-Za-z0-9]{10}|[A-Za-z0-9]{12}|[A-Za-z0-9]{25})$

如果要匹配范围内的符号,例如10到25,则可以使用

^[A-Za-z0-9]{10,25}$

此外, [A-Za-z0-9]可以替换为\\p{Alnum} (请参阅Java regex参考 )。

\\p{Alnum}一个字母数字字符: [\\p{Alpha}\\p{Digit}]

使用String#matches Java 代码演示 (不需要锚点):

System.out.println("1234567890".matches("[A-Za-z0-9]{10}|[A-Za-z0-9]{12}|[A-Za-z0-9]{25}")); 
// => true, 10  Alnum characters
System.out.println("12345678901".matches("\\p{Alnum}{10}|\\p{Alnum}{12}|\\p{Alnum}{25}"));
// => false, 11 Alnum characters
System.out.println("123456789012".matches("\\p{Alnum}{10}|\\p{Alnum}{12}|\\p{Alnum}{25}"));
// => true, 12  Alnum characters

你可以有

([A-Za-z0-9]){10}|([A-Za-z0-9]){12}|([A-Za-z0-9]){25}

注意[A-Za-z0-9]可以用\\p{Alnum}更简单地表达,使得正则表达式:

(\\p{Alnum}){10}|(\\p{Alnum}){12}|(\\p{Alnum}){25}

为了避免正则表达式引擎无用的工作,你可以写:

[A-Za-z0-9]{10}(?:[A-Za-z0-9]{2}(?:[A-Za-z0-9]{13})?)?

这样,第一个字符只被解析一次。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM