0

我需要以下模式的正则表达式

  1. 它可以以/或数字开头
  2. 它只能包含数字,不能包含文本
  3. 数字之间可以有空格。
  4. 它可以包含/*至少 1 个数字和空格或数字和/*

有效字符串:

 3232////33 43/323//
 3232////3343/323//
 /3232////343/323//

无效的字符串:

/sas/3232/////dsds/    
/ /34343///// /////
///////////

我的问题是,它可以在数字之间有空格,例如/3232 323/但不是/ /
如何验证它?

到目前为止我已经尝试过:

(\\d[\\d ]*/+) , (/*\\d[\\d ]*/+) , (/*)(\\d*)(/*)
4

5 回答 5

1

这个正则表达式应该适合你:

^/*(?:\\d(?: \\d)*/*)+$

现场演示:http ://www.rubular.com/r/pUOYFwV8SQ

于 2013-04-12T09:31:21.940 回答
0

试试这个java正则表达式

/*(\\d[\\d ]*(?<=\\d)/+)+

它符合您的所有标准。

尽管您没有具体说明,但我假设空格可能不会作为数字的第一个或最后一个字符出现(即空格必须数字之间)

于 2013-04-12T09:29:58.263 回答
0

我的解决方案不是那么简单,但它有效

^(((\d[\d ]*\d)|\d)|/)*((\d[\d ]*\d)|\d)(((\d[\d ]*\d)|\d)|/)*$
于 2013-04-12T10:35:10.877 回答
0
"(?![A-z])(?=.*[0-9].*)(?!.*/ /.*)[0-9/ ]{2,}(?![A-z])"

这将匹配您想要的,但请记住它也将匹配此

/3232///// from /sas/3232/////dsds/ 

这是因为部分无效字符串是正确的

如果您逐行阅读,则匹配 ^ $ 并且如果您正在阅读整个文本块,则在上面的正则表达式周围搜索 \r\n 以匹配每个新行

于 2013-04-12T19:00:34.667 回答
0

只需对最后一个条件使用环视

^(?=.*?\\d)([\\d/]*(?:/ ?(?!/)|\\d ?))+$

最好的办法是使用条件正则表达式,但我认为 Java 不支持它们。

解释:
基本上是数字或斜线,后跟一个数字和一个空格,或者一个斜线和一个空格,后面没有另一个斜线。重复那个。该空格是可选的,因为我假设您的字符串末尾没有空格。

于 2013-04-12T09:36:41.437 回答