我想符合以下规则:
我目前有以下正则表达式模式,我匹配反向,以便在找到不符合规则的匹配时抛出异常:
[^ - 0-9]
这种模式的缺点是它适用于所有情况,除了String中间的连字符仍将通过。例如:
“ - 2304923”被允许正确,但“9234-342”也是允许的,不应该。
请让我知道如何将第一个字符指定为[^ -0-9],其余字符指定为[^ 0-9]。谢谢!
答案 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
这将捕获前面带有可选连字符的行中的所有数字字符串。
-2304923" "9234-342" 1234 -1234
++++++++ captured
^^^^^^^^ NOT captured
++++ captured
+++++ captured
答案 2 :(得分:1)
我不明白你的模式 - [^-0-9]
如何匹配你正在谈论的那些字符串。这种模式正好与你想要的相反。您只是在开头使用caret(^)
来否定字符类。因此,此模式将匹配除hyphen
和digits
之外的任何内容。
无论如何,根据您的要求,首先您需要在开头匹配一个hyphen
。所以,只要将它放在角色类之外。然后,为了匹配任意数量的数字,您可以使用[0-9]+
或\d+
。
因此,符合所需格式的模式应为:
-[0-9]+ // or -\d+
上面的正则表达式用于在一些大字符串中查找模式。如果您希望整个字符串与此模式匹配,那么您可以在正则表达式的末尾添加锚点: -
^-[0-9]+$
答案 3 :(得分:0)
对于这样的正则表达式,根据两种情况考虑它有时会有所帮助。
|
(^[^-0-9]|^.+?[^0-9])