文字列または文字列の接頭辞が一致する場合に一致する正規表現を探しています。私は文字列「abcd
」を持っている場合たとえば、それは文字列のすべての接頭辞を一致させる
- a
- abc
- aaaa
なく
- baa
- the
にマッチします私の現在の正規表現のソリューションはa | ab | abc | abcd
ある - しかし、より簡潔な方法があるかどうか不思議。
文字列または文字列の接頭辞が一致する場合に一致する正規表現を探しています。私は文字列「abcd
」を持っている場合たとえば、それは文字列のすべての接頭辞を一致させる
- a
- abc
- aaaa
なく
- baa
- the
にマッチします私の現在の正規表現のソリューションはa | ab | abc | abcd
ある - しかし、より簡潔な方法があるかどうか不思議。
*それは私が疑問に掲載ソリューション、a | ab | abc | abcd
私はあなたが何を望んでいるのか分からないので、ここでは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
は、この正規表現を試してみてください:
^(?:abcd|abc|ab|a)+$
か、この使用することができます。
^(?:ab?c?d?)+$
Click for Demoを - この第二正規表現も、ad
のような文字列に一致します。あなたがそれをこのようにしたいかどうか分からない。
やコメントに@Wiktorにより投稿答えの若干の変更:
^(?:a(?:b(?:cd?)?)?)+$
- Link
説明:(第一正規表現のための)
^
は - スタートをアサート文字列のこの場合は、代わりに\b
を使用することもできます。(?:abcd|abc|ab|a)+
- abcd
またはabc
またはab
またはa
の1回の出現にマッチします。あなたはそれを逆に書きました。$
- 文字列の最後をアサートします。この場合は、代わりに\b
を使用することもできます。
私は混乱しています... 1 **は正規表現**である私が後だっ達成するための最も簡単な方法のように見え、一つがあります* string ** –
['\ ba(?:b?(?:cd?)?)]](https://regex101.com/r/wR1Sny/3) –