如何检查两个相同字符之间是否有不同的捕获字符?

9wbgstp7  于 2021-06-29  发布在  Java
关注(0)|答案(1)|浏览(333)

我想检查一个字符串是否具有相同的起始字符和结束字符,以及中间的所有字符是否与起始字符和结束字符不同。
示例: "da" 应该通过,因为它以 a ,并且只有非- a 他在中间, "abada" 应该失败,因为它不仅 a 在开头和结尾,也在中间, "bcdefb" 应该通过 — 参见第一个示例。
我试着靠自己来做 (.)(?!.*\1)\1 ,但它失败了,因为没有长度限制,字符串的结尾也被取反。

dm7nw8vv

dm7nw8vv1#

你可以用

^(.)(?:(?!\1).)*\1$

查看regex演示。添加 (?s) 如果您的字符串可以包含换行符,则在开始处。细节: ^ -字符串开头 (.) -第1组:任何一个字符 (?:(?!\1).)* -不等于组1中捕获的字符的任何一个字符,零次或多次 \1 -对组1值的反向引用,此处需要与组中相同的字符 $ -字符串结尾。
在java中,使用 String#matches() ,您可以省略锚定:

string.matches("(.)(?:(?!\\1).)*\\1")

相关问题