正则表达式:匹配除反向引用外的所有内容。

3

我有以下示例行:

a_a
b_c

我该如何(使用grep/egrep)匹配第一个字母不等于最后一个字母的行呢?我尝试了以下代码,但似乎并不能正确工作。
egrep ([ab])_[^\1]

对于我的用例,使用egrep -v或反向正则表达式(匹配除了首字母等于末尾字母之外的所有内容)都是不可行的


(?![ab])_? - Tushar
3个回答

0

使用分组匹配。

在此,您可以创建一个包含第一个字符的分组,然后在末尾放置分组(\1)。

^(.).*\1$

egrep '^(.).*\1$'  

相反:

^(.).*((?!\1).)+$

pcregrep '^(.).*((?!\1).)+$'

我正在尝试达到与此完全相反的效果,而不使用 egrep -v。 - Pieter De Clercq

0

也许您正在寻找这个:

\b([a-z])\w+(?!(\1))([a-z])\b

它适用于:

a_a 和 b_c

(已测试:The Regulator 2.0.3)

您可以根据需要调整此正则表达式以进一步满足您的需求。


在这种情况下,我们否定了包含第一个字母的第一组。 - HDJEMAI

0

使用以输入结尾为锚点的负向后查找。一个通用的“第一个字符不是最后一个字符”的正则表达式是:

^(.).*(?<!\1)$

为了仅匹配您的输入类型:

^(.)_.(?<!\1)$

1
你能指定哪种正则表达式支持这个吗?当我尝试使用 perl -ne 'print if /^(.).*(?<!\1)$/' file 时,它会给我返回 Variable length lookbehind not implemented - Sundeep

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接