2017-10-04 112 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代替它。
相關問題