正则表达式只匹配一次

时间:2015-12-07 15:48:00

标签: regex

我正在尝试制作一个正则表达式模式,以匹配所有具有一个 e 和一个 i 的单词。订单无关紧要!

我尝试使用{,1},仍然匹配两个或更多。 尝试过吗?在这里,还有更多的匹配。

示例词:

bier = true
biier = false
beir = true 
qwertyie = false

我尝试过的模式:

grep -E "^i?{1,1}"

grep -E "^i{1,1}"

grep -E "^i{1,1}$"

grep -E "^.*i?{1,1}.*$"

3 个答案:

答案 0 :(得分:3)

{,1}不是有效的正则表达式。

您正在尝试解析具有两个条件的内容:一个e和一个i;或者一个i,一个e

我尝试过类似的事情:

egrep "^([^ei]*e[^ei]*i[^ei]*|[^ei]*i[^ei]*e[^ei]*)$" file

答案 1 :(得分:0)

对我而言,最好的方法是分割要求。我首先要求第一个要求,然后将结果传递给第二个grep

grep "^[^ei]*e[^ei]*$" <file>|grep "^[^ei]*i[^ei]*$"

答案 2 :(得分:0)

您可以使用此awk作为复杂正则表达式的替代方法:

awk 'split($0,a,"i")<=2 && split($0,b,"e")<=2{print "true"; exit} {print "false"}' <<< "$s"

<强>示例:

awk 'split($0,a,"i")<=2 && split($0,b,"e")<=2{print "true"; exit} {print "false"}'<<<'bier'
true
awk 'split($0,a,"i")<=2 && split($0,b,"e")<=2{print "true"; exit} {print "false"}'<<<'biier'
false
awk 'split($0,a,"i")<=2 && split($0,b,"e")<=2{print "true"; exit} {print "false"}'<<<'beir'
true
awk 'split($0,a,"i")<=2 && split($0,b,"e")<=2{print "true"; exit} {print "false"}'<<<'qwertyie'
false