匹配字符串的所有前缀

Match all prefixes of a string

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

 - a
 - abc
 - aaaa

但不是

 - baa
 - the

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

我不确定你想要什么,所以这里有两个不同的解决方案。

第一个解决方案

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

试试这个正则表达式:

^(?:abcd|abc|ab|a)+$

Click for Demo

或者你可以使用这个:

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

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

或对@Wiktor 在评论中发布的答案进行轻微修改:

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

解释:(对于第一个正则表达式)

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

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