我正在尝试制作一个正则表达式模式,以匹配所有具有一个 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}.*$"
答案 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