我正在寻找匹配字符串或字符串的任何前缀匹配的正则表达式。例如,如果我有字符串' abcd
'它会匹配
- a
- abc
- aaaa
但不是
- baa
- the
我当前的正则表达式解决方案是a | ab | abc | abcd
- 但想知道是否有更简洁的方法。
答案 0 :(得分:0)
我不确定你想要什么,所以这里有两个不同的解决方案。
第一个解决方案
echo "a\nabc\naaaa\nbaa\nthe\naaabcd\nadc" | egrep "^a*b*c*d*$" | egrep -v "^$"
只有a,b,c和d按此顺序排列的单词。此外,它将避免空行。
<强>输出强>
a
abc
aaaa
aaabcd
第二个解决方案
如果您只想匹配第一个字符:
echo "a\nabc\naaaa\nbaa\nthe\naaabcd\nadc" | egrep "^a+[bcd]{0,}$"
<强>输出强>
a
abc
aaaa
aaabcd
adc
答案 1 :(得分:0)
试试这个正则表达式:
^(?:abcd|abc|ab|a)+$
或者您可以使用此:
^(?:ab?c?d?)+$
Click for Demo - 此第二个正则表达式也会匹配ad
,acd
等字符串。不确定是否需要这样。
或者@Wiktor在评论中略微修改了答案:
^(?:a(?:b(?:cd?)?)?)+$
- Link
说明:(对于第一个正则表达式)
^
- 断言字符串的开头。在这种情况下,您也可以使用\b
代替它。(?:abcd|abc|ab|a)+
- 匹配abcd
或abc
或ab
或a
的1次出现。你反过来写了它。$
- 断言字符串的结尾。在这种情况下,您也可以使用\b
代替它。答案 2 :(得分:0)
看起来实现我所追求的最简单的方法是我在问题中发布的解决方案,a | ab | abc | abcd