我正在查找匹配的正则表达式,如果字符串或字符串的任何前缀匹配。举例来说,如果我有字符串“abcd
”它将匹配匹配字符串的所有前缀
- a
- abc
- aaaa
但不
- baa
- the
我现在的正则表达式的解决方案是a | ab | abc | abcd
- 但如果有更简洁的方式不知道。
我正在查找匹配的正则表达式,如果字符串或字符串的任何前缀匹配。举例来说,如果我有字符串“abcd
”它将匹配匹配字符串的所有前缀
- a
- abc
- aaaa
但不
- baa
- the
我现在的正则表达式的解决方案是a | ab | abc | abcd
- 但如果有更简洁的方式不知道。
它看起来像最简单的方式达到什么样的我后我张贴在这个问题的解决,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
字符串,不知道你是否想要这样。
或按@Wiktor在评论中张贴的答案稍作修改:
^(?:a(?:b(?:cd?)?)?)+$
- Link
说明:(1为正则表达式)
^
- 断言开始的字符串。在这种情况下,您也可以使用\b
代替它。(?:abcd|abc|ab|a)+
- 匹配1个匹配项或者出现的次数为abcd
或abc
或ab
或a
。你反过来写了。$
- 断言字符串的结尾。在这种情况下,您也可以使用\b
代替它。
我迷茫......哪一个是正则表达式** **和哪一个是* * string ** –
尝试['\ ba(?:b(?:cd?)?)?'](https://regex101.com/r/wR1Sny/3) –