簡體   English   中英

如何檢查兩個相同字符之間是否有不同的捕獲字符?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM