2017-10-04 6 views
0

文字列または文字列の接頭辞が一致する場合に一致する正規表現を探しています。私は文字列「abcd」を持っている場合たとえば、それは文字列のすべての接頭辞を一致させる

- a 
- abc 
- aaaa 

なく

- baa 
- the 

にマッチします私の現在の正規表現のソリューションはa | ab | abc | abcdある - しかし、より簡潔な方法があるかどうか不思議。

+0

私は混乱しています... 1 **は正規表現**である私が後だっ達成するための最も簡単な方法のように見え、一つがあります* string ** –

+1

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

答えて

0

*それは私が疑問に掲載ソリューション、a | ab | abc | abcd

0

私はあなたが何を望んでいるのか分からないので、ここでは2つの異なる解決策。

まずソリューション

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

説明:(第一正規表現のための)

  • ^は - スタートをアサート文字列のこの場合は、代わりに\bを使用することもできます。
  • (?:abcd|abc|ab|a)+ - abcdまたはabcまたはabまたはaの1回の出現にマッチします。あなたはそれを逆に書きました。
  • $ - 文字列の最後をアサートします。この場合は、代わりに\bを使用することもできます。
関連する問題