我想匹配以下规则:
- 数字开头允许有一个破折号。
- 只应允许 0 到 9 之间的值。
我目前有以下正则表达式模式,我正在匹配相反的模式,以便在找到不符合规则的匹配项时抛出异常:
[^-0-9]
这种模式的缺点是它适用于所有情况,除了字符串中间的连字符仍然会通过。例如:
“-2304923”是正确允许的,但“9234-342”也是允许的,不应该是。
请告诉我如何将第一个字符指定为 [^-0-9] 并将其余字符指定为 [^0-9]。谢谢!
我想匹配以下规则:
我目前有以下正则表达式模式,我正在匹配相反的模式,以便在找到不符合规则的匹配项时抛出异常:
[^-0-9]
这种模式的缺点是它适用于所有情况,除了字符串中间的连字符仍然会通过。例如:
“-2304923”是正确允许的,但“9234-342”也是允许的,不应该是。
请告诉我如何将第一个字符指定为 [^-0-9] 并将其余字符指定为 [^0-9]。谢谢!
你可以这样做:
(?:^|\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
此正则表达式将为您工作:
^-?\d+$
解释:开始字符串^
,然后-
可选(?
),\d
重复几次的数字(+
),字符串必须在这里结束$
。
我不明白你的模式[^-0-9]
是如何匹配你正在谈论的那些字符串的。这种模式与你想要的正好相反。您只是简单地通过caret(^)
在开头使用来否定字符类。因此,此模式将匹配除hyphen
和之外的任何内容digits
。
无论如何,根据您的要求,首先您需要hyphen
在开始时匹配一个。所以,只要把它放在字符类之外。然后以后要匹配任意数量的数字,您可以使用[0-9]+
or \d+
。
因此,与所需格式匹配的模式应该是:
-[0-9]+ // or -\d+
上面的正则表达式用于在一些大字符串中查找模式。如果您希望整个字符串与此模式匹配,则可以在正则表达式的末尾添加锚点:-
^-[0-9]+$
对于像这样的正则表达式,有时从两种情况下考虑它会有所帮助。
|
(^[^-0-9]|^.+?[^0-9])