私はプログラミングが初めてで、インタビューで正規表現に関する質問がありました。言うまでもなく答えられませんでした。だから私は正規表現を学ぶべきかどうか疑問に思っていましたか?すべての分野のすべてのプログラマーにとって必須ですか?または、特定のフィールドのプログラミングには必須ですか?
関連する質問:
私はプログラミングが初めてで、インタビューで正規表現に関する質問がありました。言うまでもなく答えられませんでした。だから私は正規表現を学ぶべきかどうか疑問に思っていましたか?すべての分野のすべてのプログラマーにとって必須ですか?または、特定のフィールドのプログラミングには必須ですか?
関連する質問:
回答:
正規表現は非常に便利なツールであり、非常に多くの言語で利用できるため、ほとんどの開発者は遅かれ早かれそれらを学習します。
インタビュアーにとって、彼らはインタビュー中の経験を調べる良い方法です。あなたが彼らを理解していない長年の経験を主張する誰かにインタビューしている場合、あなたはさらに掘り下げる必要があります。
正規表現はツールです。たまたま非常に便利なツールであるため、多くの人が使用方法を学ぶことを選択します。ただし、この特定のツールの使用方法を学ぶための「要件」はありません。他のことを学ぶための「要件」があるだけです。
if (!(foo && bar))
=> if (!foo || !bar)
。たぶんあなたはそれを使っていて気付いていないか、あるいは適切な教材を教えられていないかもしれません。
たとえば、ゲームプログラマーやLHCのプログラマーが正規表現を学んだことがないのであれば、私は驚かないでしょう。ゲームプログラマにSQLを知らないパスを与えることもあります。
ただし、あらゆる種類の情報システムで作業している場合、および正規表現がわからない場合は、自分自身を傷つけています。
反対に、標準のISプログラマーがゲームプログラマーが知っている行列数学を知っているとは思わないでしょう。プログラマには明確な規律がありますが、私たちは「情報システム」の傘下にある必要があります。
正規表現は、テキストのパターンを一致させる方法を表現する非常に簡潔な方法です。
テキストからデータを解析して抽出する、または一部のテキストが特定のパターンに適合していることを検証するという要件は、プログラミングで非常に頻繁に発生するため、それらについて学び、理解することが重要だと思います。
これらはツールボックスに入れるのに適したツールであり、経験のあるプログラマなら誰でも使用方法を知っていることを期待しています。
正規表現について学ぶための最良のリソースの1つは、Jeffery Friedlの本、Mastering Regular Expressionsです。それはかなり高度なので、さらに経験を積んだときに実際に読みたいかもしれません。
regular-expressions.infoでチュートリアルを開始できます。
ここでの回答の大部分とは対照的に、正規表現の知識は生産的なプログラマーになるために必要なスキルではないと思います。ポジションの候補者にインタビューするとき、正規表現のスキルを自分から引き上げる必要があると感じたら、さらに深く掘り下げます。どうして?彼らは正しいハンマーが好きなので、しばしば場所で使用されますが、多くの場合、必要なのはドライバーでした。SOでHTMLと正規表現を検索すると、かなりの数の質問と、正規表現が不適切である理由がかなり表示されます。
適切なOODを実行する能力は、インタビュー対象者を雇用することを主張する前に必要です。正規表現の知識は確かにそうではありません。そして、実際には、正規表現は知っているが、使用されているフレームワークの分析、設計、知識などの分野に欠けている生産性の高いプログラマーであると信じている人はいないと思います
確かに便利な場合もありますが、プロの開発者としての20年以上で、コードで20回未満しか使用していなかったと思います(さらに、いくつかのperlスクリプトをコーディングしたこともあります)。しかし交換してください。
ほとんどのプログラミング言語はプレーンテキストとして記述されているため、作業しているドメインに関係なく、正規表現は知っておくと便利なツールです。したがって、Regexはソースコードを操作およびリファクタリングするための優れた方法であり、多くのテキストエディターに組み込まれています。正規表現がはるかに迅速かつ正確に変更を加える場合、無数のプログラマーがソースファイルに繰り返し変更を加えるのを見てきました。
これは、Pragmatic Programmerの第3章が「プログラミングの基本的な原材料」であるプレーンテキストについて述べていることです。
ジェフ・アトウッドは正規表現に関する素晴らしいブログを書きました。その中にはこの驚くべき引用があります:
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ユーティリティの一部と同じことを行う関数を作成しました。正確な正規表現を使用して、同じタスクは、コードの10行を使用し、約15分で完全に働きました。
正規表現が必要ですか?技術的にはそうではありませんが、効率的なツールを意図的に無知のままにしておくのは愚かです。
別の答えを引用するには:
正規表現は、テキストのパターンを一致させる方法を表現する非常に簡潔な方法です。
したがって、これが仕事の重要な部分である場合、おそらく開発中のシステムを設計するためのより良い方法があります。大量のテキストがあなたの地域に固有のドメイン(バイオインフォマティクスなど)でない限り。
私は3つの異なるエンタープライズシステム(10年間で3つの異なる企業)に取り組んできましたが、5回未満しか記述していません。これには、基本的な電子メール検証ツールのコピーと貼り付けが2回含まれます。
優れたプログラマーになるために、小さな正規表現の癖をすべて知っている必要はありません。特に、それらはすべて異なる実装とプログラミング言語の周りで少し異なる傾向があるためです。あなたは何か知っている必要があります
とにかく、そもそもそれらを習得するのに手間がかかるかどうかについて心配する必要さえありません。最も簡単な演算子(.
、*
、|
、()
、など)は、ほぼ普遍的に存在していると行く長い道を!
すでに述べたように、Regexはツールであり、非常に便利なツールです。
この例を考えてみましょう:
//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行だけ
他の方法を使用すると、はるかに複雑になります
正規表現を学ぶことを本当にお勧めします。職場では、プログラマーを雇っているとき、正規表現を知らない候補者は一般にすぐに処分されます。正規表現を絶対に知る必要があるからではなく、プログラミングの理解レベルとプログラミング中毒のレベルを示す非常に良い指標だからです。
本物のプログラマは正規表現を知っている
ただし、私は主にWebプログラミングに携わっているため、これには少し偏りがあります。正規表現は、サーバー側とクライアント側の両方で頻繁に遭遇するものです。あなたが食器洗い機に組み込まれたシステムのアセンブリプログラマだった場合、正規表現に出くわすことはおそらくないでしょう。ただし、正規表現(検索と置換、ファイルの検索、複数のファイルの検索など)を知っていると、ほとんどの場合、開発環境をよりうまく活用できるので、おそらく便利です。
また、あなたがそれを知っているなら、仲間のプログラマーによって認められるのは簡単だと思うでしょう。
うーん、この文字列のリストをコンマで区切って出力する必要があります。セパレーター引数を取るforループを含む関数を作成し、それらを一緒に追加し続けます...またはこの既存の「結合」コマンドを使用することができます。
各オブジェクトが持っているいくつかの属性に基づいて、これらの複雑なオブジェクトに並べ替える必要があります。それを行う並べ替え関数の作成方法を思い出させてください。この言語がサポートする既存の標準並べ替え関数を使用できます。カスタムコンパレータの作成方法を学習する必要がありますが、それほど難しくはないはずです。明らかに、独自の並べ替え関数を維持するよりはましです。
私は仮想メソッドのアイデアに少し怖がっていますが、それはこれらのリストを、異なるタイプのアイテムごとに単一のリストに減らすのに役立つはずです。次に、各リストを異なる方法で処理する同様のステートメントを半ダース書く必要はありません。私のコードはもっとシンプルできれいになるので、一生懸命勉強してそれらを学ぶべきだと思います。
このテキストファイルから、この他のすべてのノイズの中でこれらの単語と値のペアを抽出する必要があります。50行のパーサーを作成して、文字を1つずつ読み取り、文字の1つが私の始まりのように見える場合この状態変数を設定して、異なる方法で解析を開始するなどを探します...もちろん、私の場合は明らかに特別なので、誰もこのような問題に遭遇したことがなく、1行を取る一般的なソリューションを発明しましたそれを行うためのコードの。それは、私が決して読んだことのないプログラミング本を古本屋に持って行くべきだと思い出させてくれます。
短い答え:いいえ。...知識は力です。
私はウェブ開発者であり、私が一般的に必要とする正規表現はすでに私のために書かれています。しかし、私はコピー&ペーストに問題があり、それが何をしていたのかわからないので、何でもコピー&ペーストする危険があります。
1つの例:コピーして貼り付けたメールの正規表現では、メールアドレスの仕様で許可されているメールではピリオドまたはプラスが許可されませんでした。実際、多くの人々が実際のemail+sitename@gmail.comでgmailを使用しているため、スパムを選択した場合に「sitename」のフィルタリングが容易になります。
正規表現?うーん...時にはそれらを知ることは有用ですが、ほとんどの場合、常に同じものを使用します。私はかなり頻繁に正規表現を使用しましたが、私はそれが得意だとは言いません。私はそれがまったく好きではなく、正規表現よりも知っておくべき重要なことがあると思います。
しかし、フォーミュラまたはデータの検証では非常に便利です。ほとんどすべてのプロのフォームは正規表現で検証されていると思います。それを使用するASP.NET。
しかし、まったく:必要なときに式を実行して保存してください。うまくいけば、それらを複数回使用します。しかし、RegExで時間を無駄にしないでください!
作業している地域/プラットフォームによって異なります
デスクトップアプリケーションの場合、正規表現について何も知らなくてもクールな生活を送ることができます。ただし、Visual Studioには正規表現検索機能がありますが、だれかがそれを定期的に使用しているのでしょうか。私は考えていません(検索を行うことができるため、最初に正規表現を修正する必要があります:))。
Web開発者は、おそらく正規表現を学ぶ必要があります。必要なだけのコードスニペットをオンラインで簡単に見つけることができますが、学習することで助けになるので、それを回避できます。
正規表現が不可欠なツールであるドキュメント、訴訟、法的事項などの領域があります。あなたはそれを知る必要があります。そうしないと、単純に仕事を得ることができません。
要するに、それが職務記述書の一部でない場合、それについてさえ気にしないでください。あなたがそれを学びたいなら、楽しみのためにそれを学んでください。
私はすでにこれまで多くの回答を参照して、それらはすべてとして正規表現を知ることのメリットについてのように見えるツールプログラマのツールボックスインチ
私は、正規表現を、コンピューターがどのように機能するかについての理解を深める一種の知識と考えることを好みます。誰かが通常の言語とは何かを本当に理解し、3つの簡単な操作で表現できるとしたら、単純な文字列を検証するための単なるツールを超えた何かを提供できると思います。
解析全般をよりよく理解できるようになります。これは、あらゆる種類のプログラミングに役立ち、定期的に使用するツール(コンパイラー、エディター、ブラウザーなど)の動作をよりよく理解できます。
正規表現を使用することの実際的な利点は、もちろん膨大です。あなたが彼らと「プログラム」しなくても-私はいつもエディタで検索/置換を行う正規表現を使用し、どれだけ生産的になるかを測定します。
したがって、それは必要ではありませんが、プログラマーが学ぶべき最初のツールの1つだと思います。
正規表現は書くのが難しく、うまく書くのが難しく、他の技術に比べて高価になる可能性があります。標準の字句解析および解析手法は非常に簡単に記述でき、一般的であり、順応性が高いため、正規表現を使用する理由はありません。
別の見方をすると、レクサーと構文解析は静的に定義されたパターンに一致しますが、正規表現の強みはパターンを動的に表現する方法を提供することです。テキストエディターと検索ツールには優れていますが、コンパイル時に探しているものがすべてわかっている場合、正規表現は必要以上に一般性と柔軟性をもたらします。
すべてのテキスト処理問題の万能薬として正規表現を奨励することは、怠laで貧弱なエンジニアリングであるだけでなく、それらをまったく使用すべきでない人々による使用を強化します。
もちろん、パイクが場所を持っていることを認めていることに注意してくださいそれら。しかし、本当の問題は、それらがバンドエイドであり、私が必要以上に字句解析と構文解析についての知識を減らすことを可能にしたことである可能性があります。:)
正規表現は多くの場合、仕事に適したツールであり、特に多くのテキスト処理を行うアプリケーションでは非常に便利です。しかし、それらを覚えることは狂気です。特殊文字、アンカー、キャラクタークラス、パターン修飾子、メタキャラクターがすべて含まれているチートシートが壁に固定されています。他のすべての追跡。必要なのは、必要なときに正規表現を書くことができることです。通常は約6か月ごとです。仕事に使用するのに最適なツールである問題に遭遇するのと同じくらいの頻度です。Perl、Latex、Emacs、または他の重いテキスト処理チームに所属していない限り。