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

Java 如何检查两个相同字符之间是否有不同的捕获字符?,java,regex,Java,Regex,我想检查一个字符串是否具有相同的起始字符和结束字符,以及两者之间的所有字符是否与起始字符和结束字符不同 示例: >代码> ABCDA“应 PASS ,因为它以 A/开头和结尾,在中间只有“< > >, >代码> > 失败/强>,因为它在开始和结束时不仅有 ,而且在中间, “bcdefb”应该通过 — 参见第一个示例 我试图通过(.(?!.\1)\1执行此操作,但失败了,因为没有长度限制,字符串的结尾也为负数。您可以使用 ^(.(?:(!\1)。*\1$ 看。如果字符串可以包含换行

我想检查一个字符串是否具有相同的起始字符和结束字符,以及两者之间的所有字符是否与起始字符和结束字符不同

示例:

    >代码> ABCDA“<代码>应<强> PASS <强>,因为它以<代码> A/<代码>开头和结尾,在中间只有“< <代码> > <代码> >, >代码> <代码> > <强>失败/强>,因为它在开始和结束时不仅有<代码> <代码>,而且在中间,
  • “bcdefb”
    应该通过 — 参见第一个示例
我试图通过
(.(?!.\1)\1执行此操作,但失败了,因为没有长度限制,字符串的结尾也为负数。

您可以使用

^(.(?:(!\1)。*\1$
看。如果字符串可以包含换行符,请在开头添加
(?s)
。详情:

  • ^
    -字符串的开头
  • ()
    -第1组:任意一个字符
  • (?:(?!\1)。*
    -任何一个字符不等于组1中捕获的字符,零次或多次
  • \1
    -反向引用组1值,此处需要与组中相同的字符
  • $
    -字符串结束
在Java中,使用
String#matches()
,您可以省略锚点:

string.matches(“()(:(!\\1)。*\\1”)