正则表达式匹配字符串中的非整数值

时间:2013-02-09 20:42:30

标签: regex

我想符合以下规则:

  • 在数字开头允许一个破折号。
  • 只允许0到9之间的值。

我目前有以下正则表达式模式,我匹配反向,以便在找到不符合规则的匹配时抛出异常:

[^ - 0-9]

这种模式的缺点是它适用于所有情况,除了String中间的连字符仍将通过。例如:

“ - 2304923”被允许正确,但“9234-342”也是允许的,不应该。

请让我知道如何将第一个字符指定为[^ -0-9],其余字符指定为[^ 0-9]。谢谢!

4 个答案:

答案 0 :(得分:2)

这个正则表达式适合你:

^-?\d+$

说明:开始字符串^,然后是-,但是可选(?),数字\d重复几次(+)和字符串必须在这里完成$

答案 1 :(得分:2)

你可以这样做:

(?:^|\s)(-?\d+)(?:["'\s]|$)

 ^^^^^                        non capturing group for start of line or space
         ^^^^^                capture number
                 ^^^^^^^^^    non capturing group for end of line, space or quote 

See it work

这将捕获前面带有可选连字符的行中的所有数字字符串。

-2304923"  "9234-342"   1234 -1234 
++++++++                                   captured
            ^^^^^^^^                       NOT captured
                        ++++               captured
                             +++++         captured

答案 2 :(得分:1)

我不明白你的模式 - [^-0-9]如何匹配你正在谈论的那些字符串。这种模式正好与你想要的相反。您只是在开头使用caret(^)来否定字符类。因此,此模式将匹配除hyphendigits之外的任何内容。

无论如何,根据您的要求,首先您需要在开头匹配一个hyphen。所以,只要将它放在角色类之外。然后,为了匹配任意数量的数字,您可以使用[0-9]+\d+

因此,符合所需格式的模式应为:

-[0-9]+  // or -\d+

上面的正则表达式用于在一些大字符串中查找模式。如果您希望整个字符串与此模式匹配,那么您可以在正则表达式的末尾添加锚点: -

^-[0-9]+$

答案 3 :(得分:0)

对于这样的正则表达式,根据两种情况考虑它有时会有所帮助。

  • 第一个角色是不是以某种方式搞砸了?
  • 如果没有,是否有其他任何角色搞砸了?
  • 将这些与|
  • 合并

 (^[^-0-9]|^.+?[^0-9])

enter image description here