我有一个由\n
分隔的字母长列表和一组字符,例如' c'并且' f'。我想找到只有这两个字母不同的单词,例如" can" "粉丝","来了#34;和#34;成名"和"饭"和" rife"。
这个正则表达式在短名单中找到了一对单词,你可以see here:
/\n(.*?)c(.*?)\n(.*?\n)*?\1f\2\n/g
但是,它没有显示任何与它首先找到的匹配重叠的匹配,当我在我的长列表中使用它时,它会用完堆栈空间。
如何改进这一点,以便在单词列表中找到所有匹配项?
答案 0 :(得分:2)
有多个前瞻可能。看看这个正则表达式:
(\b(\w*?)([cf])(\w*)\b)(?=[\s\S]*(\b\2(?!\3)[cf]\4\b))
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中可用。