Java 正则表达式识别非连续字符/数字对



我想在字符串中挑选成对的单词字符,这些字符不一定在字符串中彼此相邻。例如,"ahna32g"应该匹配,因为"a"字符对。我目前拥有的是"w*(w)1+w*"如果匹配的字符是连续的,则成功。我对正则表达式很陌生,所以如果能给出详细的解释,我将不胜感激。

您需要在(w)1之间插入w*,让正则表达式引擎匹配重复字符之间的任何 0+ 单词字符:

w*(w)w*1+w*
^^^

请参阅正则表达式演示。

因此,正则表达式将匹配

  • w*- 0+ 字字符
  • (w)- 将单词字符捕获到第 1 组中
  • w*- 将匹配 0+ 单词字符
  • 1+- 组 1 中值的一次或多次出现
  • w*- 0+ 单词字符。

我的方法捕获第 1 组和第 2 组中(最早的)重复字符。它也比已经发布的答案更少的步骤。

w*?(w)(?=w*?(1))w*

w*? // 0 or more word chars, lazily matched
(w) // a word char (as group 1)
(?=  // look ahead and assert a match of:
w*? // 0 or more word chars, lazily matched
(1) // group 1 (as group 2)
)    // end of assertion
w*  // 0 or more word chars
  • 旗帜: g

演示

最新更新