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

时间:2017-08-28 14:43:23

标签: regex

我正在寻找字符串中的单词字符对,这些单词字符可能不一定在字符串中彼此相邻。例如,由于“a”字符对,“ahna32g”应匹配。我目前拥有的是"\w*(\w)\1+\w*",如果匹配的字符是连续的,则成功。我对正则表达式很陌生,所以如果能给出详细的解释,我真的很感激。

2 个答案:

答案 0 :(得分:1)

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

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

请参阅regex demo

因此,正则表达式将匹配

  • \w* - 0+ word chars
  • (\w) - 将字char捕获到第1组
  • \w* - 将匹配0+字词
  • \1+ - 在第1组内发生一次或多次值
  • \w* - 0+ word chars。

答案 1 :(得分: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

Demo