匹配字符串的所有前缀

时间:2017-10-04 08:42:41

标签: regex flex-lexer

我正在寻找匹配字符串或字符串的任何前缀匹配的正则表达式。例如,如果我有字符串' abcd'它会匹配

 - a
 - abc
 - aaaa

但不是

 - baa
 - the

我当前的正则表达式解决方案是a | ab | abc | abcd - 但想知道是否有更简洁的方法。

3 个答案:

答案 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)+$

Click for Demo

或者您可以使用此:

^(?:ab?c?d?)+$

Click for Demo - 此第二个正则表达式也会匹配adacd等字符串。不确定是否需要这样。

或者@Wiktor在评论中略微修改了答案:

^(?:a(?:b(?:cd?)?)?)+$ - Link

说明:(对于第一个正则表达式)

  • ^ - 断言字符串的开头。在这种情况下,您也可以使用\b代替它。
  • (?:abcd|abc|ab|a)+ - 匹配abcdabcaba的1次出现。你反过来写了它。
  • $ - 断言字符串的结尾。在这种情况下,您也可以使用\b代替它。

答案 2 :(得分:0)

看起来实现我所追求的最简单的方法是我在问题中发布的解决方案,a | ab | abc | abcd