正则表达式以检查重复字符

use*_*365 6 regex

我必须创建一个正则表达式,允许在文本"*ALL"(不区分大小写)中包含az,AZ和0-9范围内的OR字符,它们必须长度为17个字符.我没有遇到任何问题:

^([\*][Aa][Ll][Ll]|[a-zA-Z0-9]{17})$
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是如何改变它,以便只要输入相同的字符多次(例如17 x)就可以获取它.

nor*_*ter 7

为了做到这一点,你需要使用捕捉括号.这是一个概念,用括号括起来的任何东西都会被捕获到正则表达式解析器的内存中.

所以如果你有以下表达式:

(\w)\1+
Run Code Online (Sandbox Code Playgroud)

它将匹配一个单词字符: [a-zA-Z0-9_]和它后面的相同字符.因为括号捕获并记住了存储在其中的内容.

所以在你的情况下:

^((?:\*[aA][lL]{2})|([a-zA-Z0-9])\1{17})$
Run Code Online (Sandbox Code Playgroud)

其中(?:)是非捕获括号.

您也可以使用\1{1,17}构造,这意味着角色应该重复1到17次.

另一方面,我认为在这里使用正则表达式有点矫枉过正.你应该保存字符串,小写它然后将它与'*all'进行比较.如果它不相等,那么你可以使用正则表达式^([a-zA-Z0-9])\1{17}$来获得更多的可读性.


Hac*_*chi 4

如果您的实现语言支持,您可以使用反向引用

尝试([a-zA-Z0-9])\1{16}

the\1指的是之前匹配的组()