正则表达式减法

regex subtraction

本文关键字:正则表达式      更新时间:2023-10-16

是否可以在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'

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

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

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

要么使用消极的前瞻性(?![25])[0-9],正如伊格纳西奥已经建议的那样,要么以"艰难的方式"去做:[1346-9]

看:

  • http://www.regular-expressions.info/refflavors.html
  • http://docs.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html
做到这一点

的方法是使用负面的前瞻,但并非所有正则表达式引擎都支持它们。

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