我正在编写一个正则表达式来检查一个字符是否连续重复 5 次。如果字符重复 6 次,则第五个和第七个字符之间必须存在允许的字符。我可以对一个字符执行此操作,但无法连接多个字符的检查。我应该如何串联?
上述说明:
YYYYY -> 连续 5 次,所以这是真的
YYYYYHY -> 6 次重复,第 5 次和第 6 次重复之间允许有字符,也是如此
我当前的正则表达式:
"(.*Y{4}(([LCDH]Y)|Y).*)" // this works fine in meeting the requirement above
"(.*Y{4}(([LCDH]Y)|Y).*)|(.*T{4}(([DM]T)|T).*)" // this does not work fine
对于第二个表达式,YYYYYYTTTTTQT 的情况给我假(因为 TTTTTQT 是错误的),但我希望它给我真,因为 YYYYY 是正确的。
TTTTTQT 是错误的,因为在第五个和第六个 T 之间,只能存在 D 或 M。因此,虽然 TTTTT 是正确的,但在此之后和第六个 T 之前 Q 的存在使其错误。或者,TTTTTDT 或 TTTTTMT 也是正确的。
如何确保在连接多个此类条件时,如果其中一个条件为真,我会得到 True?
最佳答案
你可以使用这个:
^(?:Y{5}(?![^HY]Y)|T{5}(?![^DMT]T))[A-Z]*
说明
^
anchor 断言我们位于字符串的开头(?:
启动包含|
替换的非捕获组Y{5}
匹配 5 Y(?![^HY]Y)
断言后面没有一个既不是 H 也不是 Y 的字符,然后是 Y|
或T{5}
匹配 5 个 T(?![^DMT]T)
断言后面不是一个既不是 D 也不是 M 也不是 T 的字符,然后是 T)
结束非捕获组[A-Z]*
匹配任何尾随字符
关于java - 在Java中用一个感叹词正则表达式多个重复字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24747645/