我有一个字符串 ex=1,2,3,4,5-7,8,9,10-15,34,898
在上面的字符串中,我的正则表达式必须验证以下内容
- ex 字符串应仅包含数值(0-9)和两个特殊字符 ,-单独。
- 正则表达式应验证 ex 不应以空格、cama(,) 开头,并且 hyfun(-),同样不应该结束。
- cama(,) 之后应该有单独的数值。
- 字符串 ex 应仅支持正数 0-9。
- hyfun(-) 之后应该有一个单独的正数值。
- 字符串中的任何位置都不应留有空格。
- hyfun(-) 符号是上面 ex 字符串中的范围指示符,所以它应该 前缀和后缀为正数值。
- cama(,) 是字符串中每个元素的分隔符,因此它应该以正数值成功。
因此,我尝试过使用单独的正则表达式,这使得我的代码变得笨拙,并且在少数情况下会失败
//Regex Pattern for validating number alone as its starting and ending of the string
Pattern digits = Pattern.compile ("^[0-9](.*[0-9])?$");
//Regex Pattern for validating special character along with the digits alone
Pattern special = Pattern.compile("^[0-9,-]*$");
//Regex Pattern for validating only positive numeric values alone
Pattern positiveNumeric = Pattern.compile("^\\d+$");
最佳答案
这是一个应该有效的通用正则表达式模式:
^\d+(?:-\d+)?(?:,\d+(?:-\d+)?)*$
Demo
数量 \d+(?:-\d+)?
表示匹配一个或多个数字,后跟一个连字符(可选),然后是一个或多个其他数字。然后,我们将其附加到模式的末尾:
(?:,\d+(?:-\d+)?)*
这与逗号后跟另一个数字/数字组范围匹配零次或多次。
请注意,如果您使用的是,例如,^
和 $
anchor 在您的 Java 代码中可能不是必需的。 String#matches
,它会自动添加这些 anchor 。
关于Java正则表达式用于对特定模式进行正数和少数特殊符号验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56320133/