我想匹配一个精确3长度的字符串。我正在使用以下正则表达式
("\\d?[A-Za-z]{2,3}\d?")
这里的字符串在字符串的开头或结尾可以有一个数字,或者字符串可以有3个字母。有没有办法定义匹配字符串的长度,如:
("(\\d?[A-Za-z]{2,3}\d?){3}") // it does not work
我有另一个解决方案。
("(\\d[A-Za-z]{2})|([A-Za-z]{2}\\d)|([A-Za-z]{3})")
但我只想知道是否有任何方法可以定义整个匹配字符串的长度。
答案 0 :(得分:3)
^.{3}$
如果这不是您的答案,您需要更好地指定它。你有零解决方案而不是几个。你究竟想要匹配什么?举几个例子。
http://www.regexplanet.com/advanced/java/index.html
^(\d[a-zA-Z]{2}|[a-zA-Z]{2}\d|[a-zA-Z]{3})$
如果你想要那些字母和数字的东西。
如果你希望在没有字符串结束的情况下可以在最后添加额外的东西,那么你可以在之后寻找空间。
^(\ d [A-ZA-Z] {2} | [A-ZA-Z] {2} \ d | [A-ZA-Z] {3})\ S
来自评论:
所以它是
^[^\s]{3}\s\d{7}\s.\d{6}
? - ' ^'行的开头,' [^ \ s]'不是空间。 ' {3}'其中三个。 ' \ S'空间。 ' \ d'一个数字。 ' {7}'七个。 ' \ S'空间。 ''一些性格。 ' \ d'一个数字。 ' {6}'那些。
正则表达式基本上只是以编程方式描述您正在寻找的内容。如果你可以正确地形成你想要匹配的问题,那么很容易直接在正则表达式中编写它。
答案 1 :(得分:1)
您的三种解决方案也会匹配更长的字符串。我建议你使用单词边界(\b
)或行边界(^
和$
):
\b([a-zA-Z]{2}\d|\d[a-zA-Z]{2}|[a-zA-Z]{3})\b
或
^([a-zA-Z]{2}\d|\d[a-zA-Z]{2}|[a-zA-Z]{3})$
根据具体用途。
编辑:修正正则表达式,也匹配3位数。