java - 在Java中用一个感叹词正则表达式多个重复字符

标签 java regex

我正在编写一个正则表达式来检查一个字符是否连续重复 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/

相关文章:

java - 如何删除 Java 文件中单词的特定结尾?

java - 如何为我的 Android 应用程序创建 Beta 版?

c# - 多个级别的特殊字符串模式的正则表达式

regex - R regmatches() 和 stringr str_extract() 拖动空格

python - 为什么惰性匹配在此正则表达式中不起作用?

regex - 匹配字符串不包含带有正则表达式的子字符串

java - 如果收到错误的按键/数字,Twilio 无法继续播放音频

java - 链表 toString()

java - 如何在 Java/Hibernate 中获取实体类的列名称字符串

regex - 删除 SED 中指定标签内匹配前后的行