正则表达式找到相差一个字母的单词

时间:2015-09-28 20:14:01

标签: regex

我有一个由\n分隔的字母长列表和一组字符,例如' c'并且' f'。我想找到只有这两个字母不同的单词,例如" can" "粉丝","来了#34;和#34;成名"和"饭"和" rife"。

这个正则表达式在短名单中找到了一对单词,你可以see here

/\n(.*?)c(.*?)\n(.*?\n)*?\1f\2\n/g

但是,它没有显示任何与它首先找到的匹配重叠的匹配,当我在我的长列表中使用它时,它会用完堆栈空间。

如何改进这一点,以便在单词列表中找到所有匹配项?

1 个答案:

答案 0 :(得分:2)

有多个前瞻可能。看看这个正则表达式:

(\b(\w*?)([cf])(\w*)\b)(?=[\s\S]*(\b\2(?!\3)[cf]\4\b))

RegEx Demo

RegEx分手:

(         # start group #1
  \b      # word boundary
  (\w*?)  # group #2, capture 0 or more word chars
  ([cf])  # group #3, capture letters c OR f
  (\w*)   # group #4, capture remaining word chars on RHS of c or f
  \b      # word boundary
)         # end group #1
(?=       # start of lookahead
  [\s\S]* # match 0 or more of any char including newline
  (       # start group #5
     \b   # word boundary
     \2   # back-reference to group #2
     (?!\3)[cf] # c or f but make sure it is reverse of earlier match using back-reference
     \4   # back-reference to group #4
     \b   # word boundary
  )       # end of group #5
)         # end of lookahead

您的结果在捕获的组#1和捕获的组#5中可用。