我正在查找匹配的正則表達式,如果字符串或字符串的任何前綴匹配。舉例來說,如果我有字符串「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) –