私はプログラミングに不慣れで、インタビューで正規表現について質問を受けました。言うまでもありませんでした。それで、正規表現を学ぶべきかどうか疑問に思いましたか?すべての分野のすべてのプログラマーにとってそれは必須ですか?それとも、いくつかの特定の分野のプログラミングには必須ですか?
関連する質問:
正規表現は非常に便利なツールであり、非常に多くの言語で利用できるため、ほとんどの開発者は遅かれ早かれそれらを学習します。
面接担当者にとって、これらは面接中に経験を精査するための良い方法です。あなたが彼らを理解していない長年の経験を主張している誰かにインタビューしているなら、あなたはさらに掘り下げる必要があります。
正規表現はツールです。それはたまたま非常に便利なツールなので、多くの人々はそれを使う方法を学ぶことを選びます。ただし、この特定のツールの使用方法を学ぶための「要件」はありません。それ以外のことを学ぶための「要件」以上です。
たとえば、ゲームプログラマーやLHCのプログラマーが正規表現を学んだことがなかったとしても、私は驚かないでしょう。私はゲームプログラマーにSQLを知らないことへのパスを与えるかもしれません。
ただし、何らかの情報システムで作業していて、正規表現がわからない場合は、自分自身を害することになります。
反対に、私はあなたの標準的なISプログラマがゲームプログラマが知っている行列の数学を知っていることを期待しません。プログラマには明確な専門分野がありますが、私たちには「情報システム」傘。
正規表現は、テキストのパターンに一致する方法を表現する非常に簡潔な方法です。
テキストからデータを解析して抽出する、または一部のテキストが特定のパターンに準拠していることを検証するという要件は、プログラミングで頻繁に発生するので、それらについて学び、理解することが重要です。
これらはツールボックスに含めるのに適したツールであり、経験豊富なプログラマーなら誰でもその使用方法を知っていると思います。
正規表現について学ぶための最良のリソースの1つは、Jeffery Friedlの本 Mastering Regular Expressions です。かなり進んでいるので、経験を積んでから実際に読んでみてください。
tutorialregular-expressions.info から始めることができます。
ここでの回答の大部分とは対照的に、正規表現の知識は生産的なプログラマーになるために必要なスキルではないと思います。候補者に面接を行う際、候補者に自分で正規表現のスキルを身に付けさせざるを得ないと感じた場合は、さらに深く掘り下げます。どうして?彼らは正しいハンマーが好きなので、しばしば場所で使用されますが、多くの場合、必要なのはドライバーでした。検索SO HTMLおよびregexの場合、かなりの数の質問と、regexが不適切である理由がかなり多くの理由が表示されます。
正規表現の知識は確かにそうではないことをインタビュー対象者に採用することを勧める前に、適切なOODを実行する能力が必要です。そして、実際には、正規表現を知っているが、分析、設計、使用されているフレームワークの知識などの領域が不足している生産性の高いプログラマであると信じている人はいないと思います
確かに時々それらは便利ですが、プロの開発者としての私の20年以上の間、私はそれらをコードで20回未満使用したと思います(そして、私はいくつかのPerlスクリプトをコーディングしました)私は定期的にそれらを使用して検索と交換してください。
作業しているドメインに関係なく、ほとんどのプログラミング言語はプレーンテキストとして記述されているため、正規表現は知っておくと便利なツールです。したがって、Regexはソースコードを操作およびリファクタリングするための優れた方法であり、多くのテキストエディターに組み込まれています。無数のプログラマーが、正規表現で変更をより迅速かつ正確に行うことができる場合に、ソースファイルに繰り返し変更を加えるのを見てきました。
これは、実用的なプログラマーの第3章が「プログラミングの基本的な原材料」であるプレーンテキストについて話していることです。
Jeff Atwoodが正規表現について素晴らしい blog を書いた、その中にこの驚くべき引用があります:
Some people, when confronted with a problem, think "I know, I'll use regular
expressions." Now they have two problems. [Jamie Zawinski]
良い質問に対する素晴らしい答え もあるので、チェックしたいスタックオーバーフローがあります。
あなたは間違いなくそれについて少し知っているべきです。正規表現は簡単に習得できますが、習得は困難です。それを使い始めるためにそれについてすべてを学ぶ必要はありません。それについては慎重に考えてください。
tl; dr
いつ使用するかを適切に決定できるように、テクノロジーについて知る必要があります。
正規表現ライブラリが利用できない埋め込みコードベースで作業しています。特定のタスクでは275行のコードが必要であり、テスターと開発者の間で前後のすべてのケースをデバッグするのに約2週間かかりました。後で、JavaScriptユーティリティの一部と同じことを行う関数を書きました。 exact正規表現を使用した同じタスクは、10行のコードを使用し、約15分で完全に機能しました。
必要正規表現ですか?技術的にはそうではありませんが、効率的なツールを意図的に知らないままにするのは愚かです。
別の答えを引用するには:
正規表現は、テキストのパターンに一致する方法を表現する非常に簡潔な方法です。
したがって、これがあなたの仕事の重要な部分である場合、おそらくあなたが開発しているシステムを設計するより良い方法があるでしょう。多くのテキストがあなたの地域に固有のドメインでない限り(例えば、バイオインフォマティクス)。
私は3種類のエンタープライズシステム(10年間で3種類の会社)で作業し、それらを5回未満書きました。これには、基本的な電子メールバリデーターのコピーと貼り付けを2回含みます。
正規表現は、非常に便利な、クロス言語、クロスプラットフォームの処理ツールと考えることができます。私はコードで正規表現を使用でき、エディターで正規表現を使用でき、コマンドラインで正規表現を使用できます!
それはあなたが必要とするだけではなく、それらを学ぶべきです。もっと似ている
優れたプログラマーになるために、正規表現のちょっとした癖をすべて知っておく必要はありません。特に、実装やプログラミング言語ごとに少しずつ異なる傾向があるためです。あなたが知っている必要があるのはdoです
とにかく、そもそもそれらを学ぶのにあまりにも多くの努力が必要かどうかについて、あまり心配する必要はありません。最も単純な演算子(.
、*
、|
、()
など)はほぼ普遍的に存在し、longの方法です!
すでに述べたようにRegexはツールです、非常に便利なツールIMHO。
この例を考えてみましょう:
//fomat number using string.replace and regex in javascript
function numberWithCommas(x) {
return x.toString().replace(/\B(?=(?:\d{3})+(?!\d))/g, ",");
}
たとえば、この1000000.00のような数値を「1,000,000.00」に変換する1行だけ
他の方法を使用すると、はるかに複雑になります
必須ではありません。あなたはそれらの存在とそれらをいつ使うべきかを知る必要があるだけです。構文の詳細は、Googleやオンラインツールを使用して簡単に見つけて正しく取得できます。
正規表現を学ぶことを本当にお勧めします。職場では、プログラマーを雇っているとき、正規表現を知らない候補者は一般にすぐに処分されます。彼らが正規表現を絶対に知る必要があるからではなく、それが彼らのプログラミングの理解のレベルとプログラミング中毒のレベルの非常に良い指標だからです。
実際のプログラマは正規表現を知っています
ただし、これは少し偏っています。私は主にWebプログラミングに関与しているため、正規表現はサーバー側とクライアント側の両方で多くの場合遭遇するものです。食器洗い機の組み込みシステムのアセンブリプログラマーであれば、おそらく正規表現に出くわすことはないでしょう。しかし、正規表現(ファイルの検索と置換、ファイルの検索、複数のファイルの検索など)を知っていると、ほとんどの場合、開発環境を使いこなせるようになるので、それでも便利な場合があります。
また、あなたがそれを知っていれば、他のプログラマーから認められやすいでしょう。
短い答え:いいえ、しかし...知識は力です。
私はWeb開発者であり、一般的に必要な正規表現は既に作成されています。しかし、私はコピーと貼り付けで問題があり、それが何をしているかを理解していないので、コピーと貼り付けの危険があります。
1つの例:コピーして貼り付けたメールの正規表現では、メールアドレスの仕様で許可されているメールのピリオドまたはプラスが許可されませんでした。実際、多くの人が[email protected]でgmailを使用しているため、スパムを選択した場合に「サイト名」を簡単にフィルタリングできます。
うーん、この文字列のリストをコンマで区切って出力する必要があります。セパレーター引数をとるforループを含む関数を記述し、それらを一緒に追加し続けます...または、この既存の「join」コマンドを使用するだけです。
各オブジェクトが持ついくつかの属性に基づいてこれらの複雑なオブジェクトを並べ替える必要があります。それを行う並べ替え関数の作成方法を思い出させてください。まあ、待ってください。この言語がサポートする既存の標準の並べ替え関数を使用できます。カスタムコンパレータの作成方法を学ぶ必要がありますが、それほど難しくはありません。自分の並べ替え関数を維持するよりも明らかに優れています。
私は仮想メソッドのアイデアに少し怖いですが、それによって、これらのリストをさまざまな種類のアイテムごとに1つのリストに減らすことができます。次に、各リストを異なる方法で処理する同様のステートメントを6ダース作成する必要はありません。私が一生懸命勉強し、それらのことを学ぶべきだと思います。そうすれば、私のコードはずっと単純でクリーンになるからです。
このテキストファイルから、他のすべてのノイズの中でこれらの単語と値のペアを抽出する必要があります。50行のパーサーを作成して、文字を1つずつ読み取り、文字の1つが自分の先頭のように見える場合はこの状態変数を設定して別の方法で解析を開始するなどを探しています...もちろん、私のケースは明らかに特別なので、これまでこのような問題に遭遇した人は誰もいませんでしたそれを行うコードの。そのことを思い出すと、私は決して読んだことのないプログラミングの本を古本屋に持って行くべきです。
必見ですか?あなたはすでにあなたが知っていなければならないことを知っています:それらが存在すること、それらが何であるか、そしてそれらが何のために使われるか。プログラマーとしてのあなたの仕事は問題を解決することです。これで、問題を解決するためのソリューションにそれらを組み入れるのに十分な知識が身に付きました。あなたは正規表現を学ぶべきですか?もちろんです。優先順位はあなた次第です...毎日使用される仕事と、決して使用されない仕事があります。簡単なガイドは、遭遇すると予想される問題にどれだけのパターンマッチングが必要になるかです。
私はこれに対する多くの答えをすでに見ていますが、それらはすべて、プログラマーのツールボックスでtoolとして正規表現を知っていることのメリットについてのようです。
正規表現は、コンピューターのしくみに対する理解を深める一種の知識と考える方がずっと好きです。誰かが正規の言語を本当に理解し、3つの単純な操作でそれを表現できるようになれば、単純な文字列を検証するための単なるツールを超えた何かが得られると思います。
彼らは一般的に解析をよりよく理解できるようになり、ほぼすべての種類のプログラミングに役立ち、定期的に使用するツール(コンパイラー、エディター、ブラウザーなど)がどのように機能するかをよりよく理解できるようになります。
もちろん、using正規表現を使用することの実際的なメリットは計り知れません。彼らと一緒に「プログラミング」しなくても、私は常にエディターで検索/置換を行う正規表現を使用し、それらがどれだけ生産性を高めるかを測定します。
だから、必須ではありませんが、プログラマーが最初に学ぶべきツールの1つだと思います。
正規表現?うーん...時々それらを知ることは便利ですが、ほとんどの場合あなたはいつも同じものを使います。私はかなり頻繁に正規表現を使用しましたが、私はそれでうまくいくとは言いません。私はそれがまったく好きではなく、正規表現よりも知っておくべき重要なことがあると思います。
しかし、公式やデータの検証では非常に便利です。私はほとんどすべての専門的なフォームが正規表現で検証されていると思います。 ASP.NETを使用します。
しかし、まったく:必要なときに式を実行して保存します。うまくいけば、すべてを複数回使用することになります。しかし、RegExで時間を無駄にしないでください!
正直言って、正規表現はしばしば仕事に適したツールであり、特に多くのテキスト処理を行うアプリケーションでは非常に便利です。しかし、それらを記憶することは狂気です。特殊文字、アンカー、文字クラス、パターン修飾子、メタ文字がすべて含まれているチートシートを壁に固定しています...それらの使用方法を学び、チートシートを入手するために必要な20分を費やすだけです。他のすべてを追跡します。それらが必要なのは、必要なときに正規表現を記述できるようにすることだけです。これは通常約6か月ごとです。ジョブに使用するのに最適なツールである問題に遭遇するのと同じくらいの頻度です。あなたがPerl、Latex、Emacs、または他の重いテキスト処理チームにいない限り。
作業している地域/プラットフォームによって異なります
デスクトップアプリケーションの場合、正規表現について何も知らなくても、クールな生活を送ることができます。ただし、Visual Studioには正規表現検索がありますが、誰かが定期的に使用しているのではないでしょうか。私は考えていません(検索を行うことができるため、最初に正規表現を修正する必要があります:))。
Web開発者は、おそらく正規表現を学ぶ必要があります。オンラインで必要なコードスニペットを簡単に見つけることができますが、学習は役立ちます。
文書、訴訟、法的事項など、正規表現が不可欠なツールである分野があります。あなたはそれを知っている必要があります。そうでなければ、あなたは単に仕事を得られません。
つまり、仕事の説明に含まれていない場合は、気にしないでください。学びたい場合は、楽しみながら学んでください。
正規表現は非常に便利なツールであり、プログラマーが正規表現を使用する必要がある状況はたくさんあります。使用するためにそれらすべてを暗記する必要はありません。参照を使用して、タスクを実行してください。正規表現を使用した10〜20〜50〜100(プログラマによって異なります)のタスクを実行すると、それらすべてが暗記されます。彼らは自分で学んでいるので、特別に学ぶべきではありません。
正規表現は書くのが難しく、うまく書くのが難しく、他のテクノロジーに比べて高くつく可能性があります。標準の字句解析および解析手法は非常に簡単に記述でき、一般的で、適応性が高いため、正規表現を使用する必要はありません。
別の見方をすると、レクサーと解析は静的に定義されたパターンに一致しますが、正規表現の強みは、パターンを動的に表現する方法を提供することです。テキストエディターや検索ツールには優れていますが、コンパイル時に探しているものがすべてわかっている場合、正規表現は必要以上に一般性と柔軟性をもたらします。
すべてのテキスト処理問題の万能薬として正規表現を奨励することは、怠惰で貧弱なエンジニアリングであるだけでなく、それらをまったく使用してはならない人々による使用を強化します。
言うまでもありませんが、Pikeはもちろん場所があることを認めています。IMHOは正規表現が非常に強力なツールであり、私が使用法を学ぶのに費やした時間に絶対に報いるツールであり、その観点から、私は絶対に学ぶことをお勧めしますそれら。しかし、それが本当の問題である可能性はあります。それらはバンドエイドであり、それにより、私が必要以上に字句解析と構文解析について知ることができなくなりました。 :)