2011-01-20 5 views
3

私は単語リスト上のegrepし渡している次のサンプル式があります。正規表現の後方参照を比較する方法はありますか?

^([a-z])lu([a-z])\2er$ 

私はさらに、\ 1、\ 2の内容は、例えば、異なっていなければならないことを規定したいのですがこれは "bluffer"と一致しますが、 "blubber"とは一致しません。これを表現自体に組み込む方法はありますか(egrepやそのようなものから私の結果を得ることができます)か、正規表現をサポートしている実際の言語でこれをやって、私のグループのどれもが同じ?

+0

申し訳ありませんが、私は今あなたの質問に最初から含まれています。私はその答えを取り除いた。 –

+0

あなたはする必要はありませんでした!私はegrepに執着しているわけではありません。コマンドラインで実験してきたものです。 – twon33

+0

大丈夫、私はそれを元に戻すでしょう。 –

答えて

2

もっと強力なものが必要です。正規表現は状態を追跡できません。 Sedはおそらく必要なことを行うことができます。

3

(?!\1)のネガティブ先読みを2番目の一致グループの前に追加できます。次の正規表現:

([a-z])lu(?!\1)([a-z])\2er 

試合"bluffer"なく"blubber"。これは、両方のグループが同じ量の文字に一致する場合にのみ正しく動作します。

+1

私はこれが別のグループとうまくいかないと思います。私は例を省略したが、原則として、\ 1、\ 2、\ 3、...、\ nがすべて異なるような任意の数のグループを指定したいと思う。私はあなたが(?!\ 1 | \ 2 | ... | \ n-1)か何かを言うことができると思います。どのツールが上記の構文をサポートしていますか? egrepはそれをとらなかった。 – twon33

+0

@ twon33、はい、 '(?!\ 1 | \ 2 | \ 3 ...)'を実行できます。しかし、POSIXの正規表現をサポートしている(そしてどのような振る舞いもサポートしていない)egrepではそうではありません。サポートする言語/ツールについては、この[comparison-table](http://www.regular-expressions.info/refflavors.html)を参照してください。 –

関連する問題