是否有一种简单的方法可以确保RegEx输入字符串将准确包含(假设一个'a',五个'b,七个'z'字符-无需进行顺序检查?)
答案 0 :(得分:0)
在Java中,您可以按照以下说明使用StringUtils.countMatches
:How do I count the number of occurrences of a char in a String?
这不是基于正则表达式的解决方案,而是Java解决方案。那里的几个答案显示了其他技术。
答案 1 :(得分:0)
使用正则表达式执行任务的“有序”方式如下:
^
锚开始。.*$
与整个字符串匹配。现在开始讨论特定条件和各自的前瞻:
一个a
:(?=[^a]*a[^a]*$)
-应该有:
[^a]*
-与a
不同的字符数,可能为0。a
-然后是一个a
。[^a]*
-然后再输入一些与a
不同的字符,
可能是0。$
-最后是字符串的结尾。五次b
:(?=[^b]*(?:b[^b]*){5}$)
。这次b[^b]*
是
非捕获组的内容,由于其后的量词而需要。
七次z
:(?=[^z]*(?:z[^z]*){7}$)
。像以前一样,但这
所讨论的字母是z
,量词是7
。
因此整个正则表达式如下所示:
^(?=[^a]*a[^a]*$)(?=[^b]*(?:b[^b]*){5}$)(?=[^z]*(?:z[^z]*){7}$).*$
有关工作示例,请参见https://regex101.com/r/gUxC2C/1
尝试尝试内容,添加或删除a
,b
或z
并且您会看到匹配项的出现/消失。