如何验证输入中是否包含特定字符而不检查其顺序

时间:2018-11-28 14:40:46

标签: java regex

是否有一种简单的方法可以确保RegEx输入字符串将准确包含(假设一个'a',五个'b,七个'z'字符-无需进行顺序检查?)

2 个答案:

答案 0 :(得分:0)

在Java中,您可以按照以下说明使用StringUtils.countMatchesHow do I count the number of occurrences of a char in a String?

这不是基于正则表达式的解决方案,而是Java解决方案。那里的几个答案显示了其他技术。

答案 1 :(得分:0)

使用正则表达式执行任务的“有序”方式如下:

  • ^锚开始。
  • 然后针对特定情况进行3次正面预测 (详细信息如下)。
  • 最后将.*$与整个字符串匹配。

现在开始讨论特定条件和各自的前瞻:

  1. 一个a(?=[^a]*a[^a]*$)-应该有:

    • [^a]*-与a不同的字符数,可能为0。
    • a-然后是一个a
    • [^a]*-然后再输入一些与a不同的字符, 可能是0。
    • $-最后是字符串的结尾。
  2. 五次b(?=[^b]*(?:b[^b]*){5}$)。这次b[^b]*是 非捕获组的内容,由于其后的量词而需要。

  3. 七次z(?=[^z]*(?:z[^z]*){7}$)。像以前一样,但这 所讨论的字母是z,量词是7

因此整个正则表达式如下所示:

^(?=[^a]*a[^a]*$)(?=[^b]*(?:b[^b]*){5}$)(?=[^z]*(?:z[^z]*){7}$).*$

有关工作示例,请参见https://regex101.com/r/gUxC2C/1

尝试尝试内容,添加或删除abz 并且您会看到匹配项的出现/消失。