我想在字符串中挑选成对的单词字符,这些字符不一定在字符串中彼此相邻。例如,"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
演示