17

異なる言語間で正規表現の構文にわずかな違いがあることに気付いたので、この質問をしています。

どこかに維持されている正規表現標準があるかどうか疑問に思っていますか?もしそうなら、このドキュメントはどこにありますか?また、.NETでRegEx式を作成した場合、同じ式が100%互換性があり、Perl、Javascript、Javaなどの他の言語で動作することが保証されていますか?

最後に、RegExの使用に関して、他のプラットフォーム言語間での保守性を高めるのに役立つ「ベストプラクティス」はありますか?

4

3 に答える 3

17

標準化された正規表現の最も古いセットの1つは、POSIX BRE(基本的な正規表現)とERE(拡張された正規表現)であり、正規表現で説明されてます。

他の言語は独自の標準を定義する場合があります。たとえば、C ++ 2011には、28項で定義された正規表現ライブラリがあります(標準の約46ページ)。 Perlはその正規表現を定義します。他の言語は、これらのソースや他のソースから借用しています。LexとFlexは、独自の正規表現のセットを使用します。Sedは、正規表現に独自のバリアントを使用します。また、Java、JavaScript、および...は独自のバージョンを定義し、場合によってはPCRE(Perl-Compatible Regular Expressions)を設計の基礎として使用します。一部の詳細は、正規表現が使用されている言語によって提供される機能の影響を受けます。

ジェフ・フリードルの著書「正規表現の習得」では、多くの異なる正規表現のセットを取り上げ、何が共通で何が異なるかを特定しています。

于 2012-10-05T05:01:28.563 に答える
0

いいえ、そのような基準はありません。もちろん、PCRE、POSIX BRE、POSIX ERE、...があります。

しかし実際には、どの言語にも「小さな」違いがあります。.任意の文字や数量詞など、ほとんどのフレーバーの非常に基本的なことを中継できます+*?。文字クラスも一般的ですが、のような事前定義されたクラスですでに開始されていますが\w、まったくサポートされていますか?またはASCIIベースまたはUnicode?

ここでの良い助けは、 JanGoyvaertsによるregular-expressions.infoのフレーバー比較です。

于 2012-10-05T05:56:29.383 に答える
0

ベストプラクティス

の使用を避け、positive-negative lookbehinds場合によってはlookaheads

于 2012-10-05T05:56:42.093 に答える