2017-10-04 111 views
0

我正在查找匹配的正则表达式,如果字符串或字符串的任何前缀匹配。举例来说,如果我有字符串“abcd”它将匹配匹配字符串的所有前缀

- a 
- abc 
- aaaa 

但不

- baa 
- the 

我现在的正则表达式的解决方案是a | ab | abc | abcd - 但如果有更简洁的方式不知道。

+0

我迷茫......哪一个是正则表达式** **和哪一个是* * string ** –

+1

尝试['\ ba(?:b(?:cd?)?)?'](https://regex101.com/r/wR1Sny/3) –

回答

0

它看起来像最简单的方式达到什么样的我后我张贴在这个问题的解决,a | ab | abc | abcd

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 
0

试试这个正则表达式:

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

Click for Demo

或者您可以使用此:

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

Click for Demo - 这第二个正则表达式也将匹配像ad字符串,不知道你是否想要这样。

或按@Wiktor在评论中张贴的答案稍作修改:

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

说明:(1为正则表达式)

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