有没有办法比较正则表达式反向引用?

时间:2011-01-20 20:33:26

标签: regex grep

我有以下示例表达式,我将其传递给单词列表上的egrep:

^([a-z])lu([a-z])\2er$

我想进一步规定\ 1和\ 2的内容必须不同,例如:这将匹配“诈唬”而不是“鲸脂”。有没有办法将它构建到表达式本身(所以我可以直接从egrep或类似的东西得到我的结果),或者我坚持使用正则表达式支持一些真正的语言,并手动检查我的所有组都没有一样吗?

2 个答案:

答案 0 :(得分:3)

您可以在第二个匹配组前面添加否定前瞻(?!\1)。以下正则表达式:

([a-z])lu(?!\1)([a-z])\2er

匹配"bluffer"但不匹配"blubber"。只有当两个组匹配相同数量的字符时,这才能正常工作。

答案 1 :(得分:2)

你需要更强大的东西。正则表达式无法跟踪状态。 Sed可能会做你需要的。