さまざまな正規表現対応ツール/言語 (たとえば、perl、sed、java、vim など) の正規表現機能には多くの共通点がありますが、多くの違いもあります。
すべての正規表現対応ツール/言語がサポートする正規表現機能の標準サブセットはありますか? ツール/言語間で正規表現機能はどのように異なりますか?
さまざまな正規表現対応ツール/言語 (たとえば、perl、sed、java、vim など) の正規表現機能には多くの共通点がありますが、多くの違いもあります。
すべての正規表現対応ツール/言語がサポートする正規表現機能の標準サブセットはありますか? ツール/言語間で正規表現機能はどのように異なりますか?
http://en.wikipedia.org/wiki/Comparison_of_regular_expression_engines
さらに詳細: http://www.regular-expressions.info/refflavors.html
正規表現のフレーバーを比較する
egrep 文法や sed regexp 文法ではなく、grep regexp 文法を使用した場合は、多くのプラットフォームやツールで安全なサブセットを使用する必要があります。
あなたを苦しめるかもしれない唯一のことは、有限状態オートマトン (FSA) を使用する正規表現の実装とバックトラッキングを使用する実装の間で移行する場合です。たとえば、量指定子の実装は grep から Perl まで異なります。
FSA ベースの実装では、最初の可能な位置から始まる最長の一致が検索されます。バックトラックのものは、最初の可能な位置から始めて、左に偏った最初の一致を見つけます。つまり、一致するものが見つかるまで、パターンの順序で各分岐を試行します。
文字列"xyxyxyzz"
とパターンを考えてみましょう"(xy)*(xyz)?"
。FSA ベースのエンジンは、可能な限り長い部分文字列"xyxyxyz"
. バックトラッキング ベースのエンジンは、左に偏った最初の部分文字列"xyxyxy"
.
ほとんどの正規表現ツール/言語は、次の基本機能をサポートしています。
より高度なツール/言語のサポート:
標準のエンジンはありません。ただし、POSIX 拡張正規表現形式は、ほとんどのエンジンの有効なサブセットであり、おそらく標準化されたサブセットに近いものです。