正则表达式减法

时间:2012-05-30 07:42:09

标签: c++ regex bash c++11 regex-negation

是否可以在GNU sed,GNU awk,GNU grep或其他任何来自bash的地方以某种方式使用正则表达式字符类减法?

C ++ 11是否支持它?

支持此功能的位置?我无法找到除此之外的任何参考文献:http://msdn.microsoft.com/en-us/library/20bw873z.aspx(位于底部)。

更具体一点:将除2和5之外的所有数字转换为星号的最佳方法是什么,例如

sed -re 's/[0-9-[25]]/*/g'

2 个答案:

答案 0 :(得分:3)

这样做的方法是使用负面预测,但并非所有正则表达式引擎都支持它们。

>>> re.match(r'(?![25])[0-9]', '2')
>>> re.match(r'(?![25])[0-9]', '3')
<_sre.SRE_Match object at 0x25108b8>

答案 1 :(得分:3)

  

是否可以在GNU sed,GNU awk,GNU grep或其他任何来自bash的地方以某种方式使用正则表达式字符类减法?

不,不是那些工具/正则表达式实现。

大多数(流行)语言不支持此功能。 Java有一种方法可以做到这一点:[0-9&&[^25]](匹配除'2''5'之外的任何(ASCII)数字),但我知道没有其他实现支持这一点。

使用负面预测(?![25])[0-9],正如Ignacio已经建议的那样,或者是“艰难的方式”:[1346-9]

见: