正規表現の回避をやめる

Perl、PHP、Python、Ruby、JavaScript(または正規表現をサポートする他の言語)で開発し、正規表現を知らない場合、多くのことを逃しています。 意図的に正規表現を避けた場合、それはマニュアルの破れたページのようになりますが、残りの部分はそのままです。
正規表現は強力なツールです。
この声明を聞いたことがあると思います。 しかし、あなたはまた、スタックオーバーフローまたは他の場所に対処する多くの否定性を聞いた。 一般に、これには2つの主な理由があります。 おそらく、正規表現の誤用の最も一般的な例は、電子メールアドレスのチェックです。 たとえば、@記号をチェックするだけでメールアドレスをチェックしたいとします。 正規表現preg_match( '/ @ /'、$ E-mail)の使用は冗長です。 正規表現はありません。 シンボルを探していました。 この場合、strpos($ email、 '@')を使用する方が適切です。この例では、小さな電子メール文字列で作業するため、「より適切」で「高性能」ではありません。 損失は​​ごくわずかです。 ただし、電子メールアドレスの代わりに非常に大きな文字列を探し、サイクル中にこれを数回行うと、パフォーマンスが大幅に向上します。 たとえば、htmlページのソースで複数の行を見つける必要があります。 ある種の定数文字列を探している場合-正規表現を使用しないでください! 残念ながら、一部の開発者はこれが何を意味するのか理解していませんでしたが、正規表現はひどく生産的ではなく、いかなる場合でも正規表現を避けるべきだと判断しました。 それらのいくつかは、正規表現を学ばないための引数としてこれを使用します。 これは絶対に間違っています!この例にいくつかの小さな要件を追加しましょう。 @文字が文字列の最初の文字であることを確認したい場合は、その文字を#文字に置き換えます。 何らかの理由で、ツイートの応答をハッシュタグに変換する場合があります。 文字列関数を使用すると、次のようになります。
if ( 0 === strpos( $string, '@' ) ) { $string = '#' . substr( $string, 1 ); }
      
      



しかし、正規表現の助けを借りて、これをより簡潔に実現できます。
 $string = preg_replace( '/^@/', '#', $string );
      
      



まだ正規表現を知らない場合は、おそらく読みにくくなるかもしれませんが、正規表現を読む力を持つ人にとってはより便利であることを理解する必要があります。 @になると、そのときだけ、両方の@文字を#に置き換え始めます。 次に、文字列関数によりコードがさらに複雑になり、読みにくくなります。
 $length = strlen( $string ); if ( 0 === strpos( $string, '@' ) && $length - 1 === strrpos( $string, '@' ) ) { $string = '#' . substr( $string, 1, $length - 1 ) . '#'; }
      
      



正規表現はわずかに変わります。
 $string = preg_replace( '/^@(.*)@$/', '#$1#', $string );
      
      



これらはささいな例ですが、正規表現の作成の呼び出しに応答する代わりに文字列関数を使用することを主張する場合、コードがどのように複雑になるかを示しています。表現、解決策を探す、正規表現でこれを行う方法を見つける、それをカスタマイズする、遊ぶ、戦う、繰り返す これは学ぶための最良の方法です! 翻訳



All Articles