長さが3の部分文字列で始まり、文字a、b、cを含み、同じ3つの文字を含む別の別々の部分文字列も含む単語セットを見つけるように求められます。
前任者。 abcacb abcbac
正規表現を見つけるのに役立ちます。ありがとう
編集:abcbac - a、b、cは最初の3文字でなければならず、次にa、b、cは最初の3文字の順序を変更する必要があります。ひもは6本だけです。
acbbca abcccba bacbcaなど...
答え1
(ここのソリューションはgrep
GNUがPCREサポートで構築されていると仮定しています(通常cygwinの場合)。)
あなたの要求の前半は次のことを意味します。
grep -Pwo '(abc|acb|bac|bca|cab|cba)\w*(?1)\w*'
または:
grep -Pwo '(abc|acb|bac|bca|cab|cba)\w*\1\w*'
後半は前半と矛盾するようです。
grep -Pwo '(abc|acb|bac|bca|cab|cba)(?!\1)(?1)'
見つけるでしょう性格(言葉この場合、文字シーケンスとして定義されている、および[a-zA-Z0-9_]
(各文字ごとに1つ)からなる3文字シーケンスで始まりますが、その後に別のシーケンス(最初のグループと同じ正規表現を参照)が続きます。ただし、最初のキャプチャグループと異なる場合(最初のキャプチャグループと一致する文字列を参照)a
b
c
(?1)
(...)
\1
(...)
(?!...)
否定的な見通しオペレーター)。
$ echo abcbca abcbcax abcabc aaabbb xcabacb abcacb-blah |
grep -Pwo '(abc|acb|bac|bca|cab|cba)(?!\1)(?1)'
abcbca
abcacb
答え2
これにより、トリックを実行できます。
grep -Ew '[a-c]{3}.*[a-c]{3}'
-E
正規表現の一致-w
単語のみ一致[a-c]{3}
a-c
セットの3文字と正確に一致します。.*
間のどんなものとも一致