ギンモクな正規表現は非常に遅く、メモリが空いている可能性があります。私が知っているのは、私が創造したからです。これは、正規表現によってトークン化されるべきではないものをトークン化することができます。 :-)あなたがリンクをしたいのなら...今...私は "小さな"正規表現をベンチマークしていないので、私はそのスピードを知らない。彼らは確かにはコンパクトです。
ああ私は忘れていた、regexesは悪です。彼らの主な問題は、彼らがハンマーのようなものであり、あなたがそれらを持っているとき、あなたはすべての問題を爪のようにしようとしているということです。だから彼らの主な問題はユーザー(プログラマー)にある。
最初の「大きな」制限:Javascriptでは、Unicodeをサポートしていないサブセットのみが実装されています。通常、サーバー側で使用する言語はより完全な実装であるため、jsによって制限されます。 .NETのような完全な実装でさえも、サロゲートペアのサポートがなく、「合成」文字(結合マークを使用する文字)のサポートがないという大きな制限があります。しかし、いつものように、問題はプログラマーにあります。 Unicodeを知っているプログラマーの多くは、Unicodeの複雑さ、さまざまな桁数、発音区別符の複雑さを知っていますか?
第2の「大きな」制限:保守性。彼らは書かれているときに複雑であり、読むことができません。しかし数ヶ月後?彼らは悪化する!そして、新しいプログラマーを育成しなければならない場合、今ではさらに1つの言語、すなわち正規表現を学ばなければなりません。
第3の「大きな」制限:あまりにも多く隠れる。 \d\s\d
が表示されます。どういう意味ですか?数字とスペースと数字?確かに。しかし、.NET Regexesの\d
と\s
はいずれもマイクロワールドを「隠す」。 \d
は、非ヨーロッパの桁に「一致」します(Unicodeには多くの桁があります)。 \s
"それは私がその名前を知らない非常に多くの秘密のスペースに"マッチする "...私はそれについて考えることさえしたくない。彼らは氷山のようなものです。わずか1/8が水中にあり、7/8は隠されています。しかしそれはおそらくあなたを殺すでしょう7/8です。
それぞれに異なる制限があるので、使用している正規表現エンジンを実際に指定する必要があります。いくつかの文法のような正規表現を許すようになった人もいます。 tchrist(Tom Christiansen)の答えはここにあるので、正規表現エンジンが到達したパワーを知ることができます。 – ninjalj