[英]How do I check if there are different captured characters between two same characters?
我想檢查一個字符串是否具有相同的開始和結束字符,並且中間的所有字符都不同於開始和結束字符。
例子:
"abcda"
應該通過,因為它以a
開頭和結尾,並且中間只有非a
,"abada"
應該失敗,因為它不僅在開頭和結尾都有a
,而且在中間,"bcdefb"
應該通過- 參見第一個示例。 我試圖通過(.)(?..*\1)\1
來做到這一點,但它失敗了,因為沒有長度限制,也否定了字符串的結尾。
您可以使用
^(.)(?:(?!\1).)*\1$
請參閱正則表達式演示。 如果您的字符串可以包含換行符,請在開頭添加(?s)
。 細節:
^
- 字符串的開頭(.)
- 第 1 組:任何一個字符(?:(?.\1).)*
- 任何一個不等於第 1 組中捕獲的字符的字符,零次或多次\1
- 對第 1 組值的反向引用,此處需要與組中相同的字符$
- 字符串結束。 在 Java 中,使用String#matches()
,您可以省略錨點:
string.matches("(.)(?:(?!\\1).)*\\1")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.