【问题标题】:Regex to determine if string is a single repeating character [duplicate]正则表达式确定字符串是否是单个重复字符[重复]
【发布时间】:2015-03-20 03:37:20
【问题描述】:

确定一个字符串是否仅由单个重复字符组成的正则表达式模式是什么?

例如

"aaaaaaa" = 真
"aaabbbb" = 假
"$$$$$$$" = 真的

This 问题检查字符串是否仅包含重复字符(例如“aabb”)但是我需要确定它是否是单个重复字符。

【问题讨论】:

  • ^(.)\1+$ 也许?取决于语言。 Regex101
  • 糟糕 Java,刚刚添加了标签。
  • 如果有人想要与此相反,仅当字符串不包含从头到尾的相同字符时才允许,这是正则表达式 ^(?!(.)\1+$)。* @987654323 @这个链接帮我否定了它
  • @PSatishPatro 你总是可以在这个问题的答案中使用正则表达式和 java 'not' 运算符:!string.matches(^(.)\1{1,}$);

标签: java regex string repeat


【解决方案1】:

你可以试试back reference

^(.)\1{1,}$

DEMO

模式说明:

  ^                        the beginning of the string
  (                        group and capture to \1:
    .                        any character except \n
  )                        end of \1
  \1{1,}                   what was matched by capture \1 (at least 1 times)
  $                        the end of the string

反向引用匹配与捕获组先前匹配的相同文本。反向引用\1(反斜杠)引用第一个捕获组。 \1 匹配与第一个捕获组匹配的完全相同的文本。


在Java中你可以试试

"aaaaaaaa".matches("(.)\\1+") // true

不需要^$,因为String.matches() 会查找整个字符串匹配。

【讨论】:

  • 我需要使用“匹配”操作,上面的 java 示例效果很好。
  • 很好的模式解释。
【解决方案2】:

这实际上取决于您的语言,但通常这将匹配具有所有相同字符的行。

^(.)\1+$

Regex101 Example

  • ^ 在行首断言位置
  • 第一捕获组(.)
  • \1+ 匹配与第一个捕获组最近匹配的相同文本 量词:+ 一次到无限次,尽可能多次,按需回馈[贪心]
  • $ 在行尾断言位置

【讨论】:

    猜你喜欢
    • 2018-05-24
    • 1970-01-01
    • 2011-08-08
    • 1970-01-01
    • 2023-03-04
    • 2017-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多