模式
^\\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位数。我错过了什么?
答案 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})$
<强>击穿强>
^
这表示字符串的开头
\d or [0-9]
表示数字0到9中的一个字符(注意\ d可能在某些语言中不起作用或需要不同的语法!)
|
本质上是一个OR
{1,12}
只接受1-12次特定模式,例如在我的代码中,模式应为\ d或[0-9]
$
是该行的结尾
这基本上检查该行是否包含带有 - after,TWC的[0-9],或者只是一个空格,以便在开始时没有任何内容,然后读取最多12位数。应该适用于所有情况。
<强>测试强>
所有单元测试。如果你想看到它们,请点击“java”:0
注:
您需要查看您在某些情况下使用的内容的语法,您可能需要\有些事情要求他们工作..在C ++ / C中它的2 //为了这些工作请尽快关于特定语法的问题。