我有以下示例表达式,我将其传递给单词列表上的egrep:
^([a-z])lu([a-z])\2er$
我想进一步规定\ 1和\ 2的内容必须不同,例如:这将匹配“诈唬”而不是“鲸脂”。有没有办法将它构建到表达式本身(所以我可以直接从egrep或类似的东西得到我的结果),或者我坚持使用正则表达式支持一些真正的语言,并手动检查我的所有组都没有一样吗?
答案 0 :(得分:3)
您可以在第二个匹配组前面添加否定前瞻(?!\1)
。以下正则表达式:
([a-z])lu(?!\1)([a-z])\2er
匹配"bluffer"
但不匹配"blubber"
。只有当两个组匹配相同数量的字符时,这才能正常工作。
答案 1 :(得分:2)
你需要更强大的东西。正则表达式无法跟踪状态。 Sed可能会做你需要的。