需要正则表达式来模式化

时间:2013-04-12 09:26:08

标签: java regex

我需要一个正则表达式,用于下面的模式

  1. 可以以/或数字开头
  2. 它只能包含数字,没有文字
  3. 数字之间可以有空格。
  4. 它可以包含/*,至少1个数字和空格或数字以及/*
  5. 有效字符串:

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

    无效字符串:

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

    我的问题是,它可以在/3232 323/之类的数字之间留出空格,而不是/ / 如何验证?

    到目前为止我已尝试过:

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

5 个答案:

答案 0 :(得分:1)

这个正则表达式适合你:

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

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

答案 1 :(得分:0)

试试这个java正则表达式

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

符合您的所有标准。

虽然您没有明确说明,但我假设某个空格可能不会显示为数字的第一个或最后一个字符(即空格必须数字之间)

答案 2 :(得分:0)

只需使用lookarounds作为最后一个条件。

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

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

<强>解释
基本上是数字或斜杠,后跟一个数字和一个空格,或一个斜杠和一个没有后跟另一个斜杠的空格。重复一遍。该空格是可选的,因为我假设你的字符串末尾没有空格。

答案 3 :(得分:0)

我的解决方案并非如此简单,但可行。

^(((\d[\d ]*\d)|\d)|/)*((\d[\d ]*\d)|\d)(((\d[\d ]*\d)|\d)|/)*$

答案 4 :(得分:0)

"(?![A-z])(?=.*[0-9].*)(?!.*/ /.*)[0-9/ ]{2,}(?![A-z])"

这将符合您的要求,但请记住它也会匹配此

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

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

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