【问题标题】:Extended Posix Regular Expression - Negation of multiple strings using "^"扩展 Posix 正则表达式 - 使用“^”否定多个字符串
【发布时间】:2019-03-15 20:51:30
【问题描述】:

我有一个旧应用程序,它使用扩展 POSIX 正则表达式来评估返回码以做出一些决定。

返回代码示例:

RETCODE = 0 SUCCESS
RETCODE = 3007 ERR3007
RETCODE = 3001 ERR3001
RETCODE = 13007 ERR13007
RETCODE = 3 ERR3
RETCODE = 1 ERR1

我写了一个正则表达式,用于在返回码为 0 或 3007 时考虑成功:“.*RETCODE = (0|3007).*”

现在我需要另一个正则表达式来在返回码是其他值时考虑 FAILURE。这意味着,当返回码既不是 0 也不是 3007 时。

注意 1:我的应用程序仅将“^”视为否定字符。

注意 2:我使用命令“egrep”测试表达式

您能帮我解决一下这种情况吗?

提前致谢。

伊万。

【问题讨论】:

  • 您能告诉我们为什么需要两个正则表达式吗?因为RETCODE = ((0|3007)|([0-9]+))[ ] 匹配两种返回类型,并将成功代码存储在第二个捕获组中,并将失败代码存储在第三个捕获组中。

标签: regex posix regex-negation


【解决方案1】:

POSIX 扩展正则表达式不支持负前瞻断言。然而,正则语言的补码本身又是正则的,所以你可以为此编写一个正则表达式,它真的很笨拙,即使你不打算精确否定匹配:

RETCODE = ([124-9][0-9]*|3|30|3[1-9][0-9]*|30[1-9][0-9]*|300|300[01-689][0-9]*|3007[0-9]+)[ ]

【讨论】:

  • 一个字符类应该包含0。目前它不允许3000
  • 谢谢。也缺少其他一些极端情况。
猜你喜欢
  • 1970-01-01
  • 2021-09-07
  • 2020-06-25
  • 2019-11-05
  • 2012-11-04
  • 1970-01-01
  • 2010-11-12
相关资源
最近更新 更多