Java正则表达式用于对特定模式进行正数和少数特殊符号验证

标签 java regex

我有一个字符串 ex=1,2,3,4,5-7,8,9,10-15,34,898

在上面的字符串中,我的正则表达式必须验证以下内容

  1. ex 字符串应仅包含数值(0-9)和两个特殊字符 ,-单独。
  2. 正则表达式应验证 ex 不应以空格、cama(,) 开头,并且 hyfun(-),同样不应该结束。
  3. cama(,) 之后应该有单独的数值。
  4. 字符串 ex 应仅支持正数 0-9。
  5. hyfun(-) 之后应该有一个单独的正数值。
  6. 字符串中的任何位置都不应留有空格。
  7. hyfun(-) 符号是上面 ex 字符串中的范围指示符,所以它应该 前缀和后缀为正数值。
  8. 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/

相关文章:

javascript - 正则表达式:在 url 登录/测试中获取字符串

java - 由类的方法延迟分配的非 volatile 变量是否可以不被另一个线程读取?

java - System.out.println 和 System.err.println 乱序

java - 在 JSP 中从对象 ArrayList 转换为对象数组

javascript - 替换字符串中单词前后出现的特殊字符

regex - 用 awk 替换字段中最后一次出现的字符

c# - C# 中的正则表达式问题

regex - 特殊条件 - 从模组中删除所有版本号以搜索新版本

java - 为什么我的数据库连接在没有 @Transactional 的情况下会泄漏?

java - 无法将 Jasypt 加密密码保存到 .properties 文件