posix正则表达式在同一行中找到A但没有B.

时间:2016-01-13 23:53:29

标签: regex posix

我知道perl兼容的正则表达式可以通过使用" lookaround"技术,但我手上只有posix正则表达式,它不支持" lookaround",所以我的问题是我可以使用posix正则表达式找到A而不是B就行了。

这是一个简单的例子:

我想找一个" foo"但没有" bar"在一条线上,

this has a foo           # match
i can haz foo            # match
but i haz foo and bar    # NOT match

and here is a similar question

1 个答案:

答案 0 :(得分:0)

最好的方法(无论使用哪种语言或工具)都是分别测试两种模式(或两种字符串)。 sed示例:

sed -n '/foo/{/bar/!p}'

简短而有效。

要对一个ERE模式执行相同操作,您必须写:

^([^b]|b([^a]|$|a([^r]|$)))*foo([^b]|b([^a]|$|a([^r]|$)))*$

你认为这是一个更好的选择吗? (这是一个三个字母的单词)