8

私はPCRE(Perl互換正規表現)の能力に興味があり、それらがすべての主要言語で事実上のアプローチになる可能性があるかどうか疑問に思っています(私はJavaに興味があります)。必要に応じて図書館を利用する準備ができています。

また、SOでPCREの長所と短所を説明する良いページを見つけることができなかったので、これが存在しない場合は、これを回答に含めると便利です。

編集私はJava1.6正規表現を超えるパワー、特に名前付きキャプチャグループに興味があります

4

5 に答える 5

10

libpcre を実際に使用するよりも、多くの主流言語が実際に「Perl に似た」正規表現の独自の実装を使用しているようです。このクラスに分類される言語には、(少なくとも) Java、JavaScript、および Python が含まれます。

Java のjava.util.regexライブラリは、Perl (およそバージョン 5.8) 正規表現に非常に大きく基づいた構文を使用します。これには、エスケープのルール、\pおよび\PUnicode クラス、貪欲ではない「所有」量指定子、後方参照、\Q..\E引用、およびいくつかの(?...)構成要素が含まれます。非キャプチャ グループ、ゼロ幅の先読み/後読み、および非バックトラッキング グループを含みます。実際、Java 正規表現は、libpcre よりも Perl 正規表現との共通点が多いようです。:)

JavaScript 言語は、Perl から派生した正規表現も使用します。Unicode クラス、後読み、所有量指定子、非バックトラッキング グループはありませんが、Java について言及した残りの部分は JS にも存在します。

Python の正規表現構文も Perl 5 に基づいており、貪欲でない量指定子、(?...)非キャプチャ グループ、先読み/後読みパターン、条件付きパターン、名前付きキャプチャ グループを含むほとんどの構造 (ただし、Perl または Perl とは異なる構文を使用)または PCRE)。非バックトラッキング グループと「所有」量指定子は (私が見る限り)\pおよび\PUnicode 文字クラスと同様に存在しませんが、標準\dの 、\s、および\wクラスは要求があれば Unicode 対応です。

于 2009-09-19T09:14:38.413 に答える
1

私は...それら[PCRE]がすべての主要な言語で事実上のアプローチになる可能性があるかどうか疑問に思っています(私はJavaに興味があります)。

これには推測が必要ですが、答えは「いいえ」だと思います...Javaの場合。これは、価値のある Java の PCRE 実装を見つけることができなかったという事実に基づいています。

Java で PCRE が本当に必要/需要があるのであれば、もっと多くのライブラリが存在することを期待していたでしょう。


アップデート

私が元の回答を書いて以来、より多くの人々/グループが、PCRE 互換の正規表現を提供する (または提供すると主張する) Java ライブラリを実装しています。

そして明らかに、Java チームは、Java の正規表現サポートに Perl の機能を追加する可能性があります (そして追加しています)。たとえば、名前付きキャプチャ グループは Java 7 で追加されました。

しかし、PCRE の完全な互換性は、Java チームにとって優先度の高い目標ではないようです。例えば:

そして、完全な互換性が既存の Java アプリケーションのサブセットを破壊する可能性が高いことを考えると、答えは No だと思います。

于 2013-08-06T07:03:18.100 に答える
0

この試合を分割してみてください:

(?:
  (?:'[\S\s]*?(?<!\\)') # Consume characters inside of a quoted string
  |(?:\/\*[\S\s]*?\*\/) # Consume multi-line comments
  |(?m:\/{2}[^\n]*$\n)  # Consume single-line comments
)(*SKIP)(*F)            # Fail match if any of the previous matches were found
|(?<=;)                 # Capture position right after semicolon

'x' および 'g' (必要な場合) 修飾子を必ず使用してください。

于 2015-08-11T17:53:41.143 に答える
-3

これは、「X は唯一の真の道なのか!?」のように聞こえます。一種の質問。PCRE には多くの欠点があります。最も明白なのは、その複雑さと疑わしい有用性です。正規表現ライブラリの領域では、PCRE は確実にそうではありません。

私の意見では、Perl の正規表現は完全にがらくたです。POSIX 拡張正規表現 (ERE) によって提供される機能セットをはるかに超えると、PEG 実装のようなものを使用することもできます。PCRE が広く使用されている唯一の理由は、ライブラリに立ち寄るだけで簡単に問題を解決できるからです。

于 2013-12-12T22:04:26.207 に答える