匹配字符串的所有前缀
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)+$
或者你可以使用这个:
^(?:ab?c?d?)+$
Click for Demo - 第二个正则表达式也将匹配 ad
、acd
等字符串。不确定您是否需要这种方式。
或对@Wiktor 在评论中发布的答案进行轻微修改:
^(?:a(?:b(?:cd?)?)?)+$
- Link
解释:(对于第一个正则表达式)
^
- 声明字符串的开头。在这种情况下,您也可以使用 \b
代替它。
(?:abcd|abc|ab|a)+
- 匹配出现 1 次以上的 abcd
或 abc
或 ab
或 a
。你把它写反了。
$
- 断言字符串结束。在这种情况下,您也可以使用 \b
代替它。
看起来最简单的方法就是我在问题中发布的解决方案,a | ab | abc | abcd
我正在寻找匹配字符串或字符串的任何前缀的正则表达式。例如,如果我有字符串 '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)+$
或者你可以使用这个:
^(?:ab?c?d?)+$
Click for Demo - 第二个正则表达式也将匹配 ad
、acd
等字符串。不确定您是否需要这种方式。
或对@Wiktor 在评论中发布的答案进行轻微修改:
^(?:a(?:b(?:cd?)?)?)+$
- Link
解释:(对于第一个正则表达式)
^
- 声明字符串的开头。在这种情况下,您也可以使用\b
代替它。(?:abcd|abc|ab|a)+
- 匹配出现 1 次以上的abcd
或abc
或ab
或a
。你把它写反了。$
- 断言字符串结束。在这种情况下,您也可以使用\b
代替它。
看起来最简单的方法就是我在问题中发布的解决方案,a | ab | abc | abcd