我必须创建一个正则表达式,允许在文本"*ALL"(不区分大小写)中包含az,AZ和0-9范围内的OR字符,它们必须长度为17个字符.我没有遇到任何问题:
^([\*][Aa][Ll][Ll]|[a-zA-Z0-9]{17})$
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是如何改变它,以便只要输入相同的字符多次(例如17 x)就可以获取它.
为了做到这一点,你需要使用捕捉括号.这是一个概念,用括号括起来的任何东西都会被捕获到正则表达式解析器的内存中.
所以如果你有以下表达式:
(\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}$来获得更多的可读性.