Java Regex模式检查

时间:2013-08-28 21:11:36

标签: java regex

模式

^\\d{1}-\\d{10}|\\d{1,9}|^TWC([0-9){12})$

应该验证这些中的任何一个 1-23232445
1-232323
1-009121212
12个
12222个
TWC12222
TWC1222324

当我测试TWC模式不匹配时,我添加了“|”考虑OR条件,然后从0到9的数字,但限制为12位数。我错过了什么?

2 个答案:

答案 0 :(得分:1)

很抱歉所有的困惑,也显然是为了撒谎。您遇到的问题是您在几个不值得的地方使用精确量词,即{10}{12}。这要求正好十个或十二个数字。您可能想要的是分别为{1,10}{1,12}的人。

我会做的是这样的事情,使用括号和量词来清理所有内容并尽可能少地重复自己,以避免混淆。你有三个可能的前缀(一个数字和一个短划线,或“TWC”,或什么都没有)。我把这些可能性放在一起,然后添加其余的。这使得正则表达式更易于查看。

^(\\d-|TWC){0,1}\\d{1,12}$

细分:

^始终是。

(\\d-|TWC){0,1}接下来是单个数字后跟短划线或字符串"TWC"。此前缀出现零次(无前缀)或一次。

\\d{1,12}$最后,有一个一到十二个数字的字符串,后跟行/输入的结尾(当然,取决于你的DOTALL设置)。

当然,如果不同的前缀只能允许一定数量的数字,那么你将无法简化它,但这是基本的想法。


你也看起来像拼写错误; TWC([0-9){12})应为TWC([0-9]{12})。我猜这只是在写出问题时只是一个错字,因为你现在所拥有的东西会在你尝试使用它时在运行时爆炸,否则听起来它适用于你的一些输入。

答案 1 :(得分:1)

TWC([0-9)

我认为这可能无法正常工作?

你需要

TWC([0-9]{12})

完整答案......

(\d{1}-\d{1,12})|^TWC(\d{1,12})$

更好的答案..

^(\\d-|TWC|)(\\d{1,12})$ // this syntax i believe will match your needs.

测试:)

^([0-9]-|TWC|)([0-9]{1,12})$ // or

^(\d-|TWC|)(\d{1,12})$

Regular expression visualization

<强>击穿

^ 

这表示字符串的开头

\d or [0-9] 

表示数字0到9中的一个字符(注意\ d可能在某些语言中不起作用或需要不同的语法!)

| 

本质上是一个OR

{1,12} 

只接受1-12次特定模式,例如在我的代码中,模式应为\ d或[0-9]

$

是该行的结尾

这基本上检查该行是否包含带有 - after,TWC的[0-9],或者只是一个空格,以便在开始时没有任何内容,然后读取最多12位数。应该适用于所有情况。

<强>测试

edit code.

所有单元测试。如果你想看到它们,请点击“java”:0

more testing.

注:

您需要查看您在某些情况下使用的内容的语法,您可能需要\有些事情要求他们工作..在C ++ / C中它的2 //为了这些工作请尽快关于特定语法的问题。