すべてのプログラマーが正規表現を学ぶ必要がありますか?[閉まっている]


82

私はプログラミングが初めてで、インタビューで正規表現に関する質問がありました。言うまでもなく答えられませんでした。だから私は正規表現を学ぶべきかどうか疑問に思っていましたか?すべての分野のすべてのプログラマーにとって必須ですか?または、特定のフィールドのプログラミングには必須ですか?

関連する質問:


55
私は、それらが何であるか、いつ使用するか、構文をグーグルする方法を個人的に知っています。肩をすくめる
ティアナ

35
これは、すべてのパワーユーザーにとって必須です。そして、生産性を上げるにはプログラマーはパワーユーザーでなければなりません。
SKロジック

8
なぜあなたはそれらを学びたくないのですか?あなたはそれらを知ることから利益を得るだろう少なくとも一つの状況に既に遭遇しました。将来、同様の状況に陥る可能性があるのは理にかなっていますか?
FishBasketGordo

23
テキストで動作するもののみ:)
スティーブジャクソン

回答:


113

正規表現は非常に便利なツールであり、非常に多くの言語で利用できるため、ほとんどの開発者は遅かれ早かれそれらを学習します。

インタビュアーにとって、彼らはインタビュー中の経験を調べる良い方法です。あなたが彼らを理解していない長年の経験を主張する誰かにインタビューしている場合、あなたはさらに掘り下げる必要があります。


4
私は同意します、それは経験豊富な開発者にとって良い質問です。しかし、実務経験のない新卒者に質問することは、おそらく少し不公平です-実際のプログラミング経験のない応募者を本当に除外したいのでなければ。
SKロジック

2
@ SK-logic:学校によって異なります。2年目には全員が正規表現をかなり頻繁に使用する必須のコースを受講しました(私は、それが私がそれらに夢中になった場所だと認めます;))。そして、いくつかの上級レベルのコースが再びそれらを育てましたが、それほど激しくはありませんでした。
FrustratedWithFormsDesigner

上記のコメントに同意しました-学校を卒業したばかりの誰かが必ずしも正規表現を知っているとは思わないでしょう。しかし、私はまだ尋ねるかもしれません。
ptyx

13
私は数学者なので、コンピューターサイエンスの正式なバックグラウンドはありませんが、文法、パーサー、オートマトンなどを議論しながら、実際に大学のコースで正規表現が教えられていると思っていたでしょう。私は実際に、大学を卒業したばかりの誰かが、CSを勉強していない経験豊富なプログラマよりも優れた知識を持っていると期待していました。:-/
アンドレア

8
@Andrea、私が大学にいたとき(コンピューターサイエンスの学士号)、文法とオートマトンについて学ぶとき、正規表現は実際にカバーされていました。ただし、カバーされたのはアプリケーションではなく、正式な概念のみでした。POSIXまたはPerl互換の正規表現の構文、またはそれらをコーディングで使用する方法を学習しませんでした。有限状態オートマトンの状態図を描く方法、正規表現として書く方法などを学びました。grepやテキストファイルではなく、ギリシャ文字が関係していました。
アダムヤスキエヴィチ

54

正規表現はツールです。たまたま非常に便利なツールであるため、多くの人が使用方法を学ぶことを選択します。ただし、この特定のツールの使用方法を学ぶための「要件」はありません。他のことを学ぶための「要件」があるだけです。


19
これは、ブール論理を理解することは有用ですが、必須ではないということと同じです。
-Oded

1
@Oded:私のコースで教えられているブール論理の使用法は見つかりませんでした。
-DeadMG

16
@DeadMG、私は変換のように常にブール論理を使用します:if (!(foo && bar))=> if (!foo || !bar)。たぶんあなたはそれを使っていて気付いていないか、あるいは適切な教材を教えられていないかもしれません。
zzzzBov

7
バージョン管理が好きですか?それともソフトウェアテスト?
コンラッドルドルフ

2
@ruakh-これらは非常に有用であることに同意します。私はいつも自分で使っています。すべてのプログラマー、キャリアのある時点で正規表現を使用する方法を学ぶ必要があると思います。しかし、質問はそれを尋ねませんでした。
-eykanal

33

たとえば、ゲームプログラマーやLHCのプログラマーが正規表現を学んだことがないのであれば、私は驚かないでしょう。ゲームプログラマにSQLを知らないパスを与えることもあります。

ただし、あらゆる種類の情報システムで作業している場合、および正規表現がわからない場合は、自分自身を傷つけています。

反対に、標準のISプログラマーがゲームプログラマーが知っている行列数学を知っているとは思わないでしょう。プログラマには明確な規律がありますが、私たちは「情報システム」の傘下にある必要があります。


1
LHCのプログラマは、正規表現を使用して、センサーによって生成されたデータファイルを検索する場合があります。ゲームプログラマは、正規表現を使用して、ゲームで作成されたログファイルを検索する場合があります。OK、彼らはする必要はないかもしれません、それはおそらくそのようなタスクをはるかに簡単にすることができます。
FrustratedWithFormsDesigner

1
私は同意しますが、ゲームプログラマーの立場について面接している場合、正規表現が何であるかを知らなければ、私はまだ誰かを雇います。もし私が正規表現が何であるかを知らない伝統的なビジネスプログラミングの役割で誰かを雇っていたなら、彼らはおそらく雇われないでしょう。
ジョナサンリッチ

それは公平だと思う。
FrustratedWithFormsDesigner

7
素粒子物理学者はほとんどunixに似た環境で働いていますが、そのコミュニティに関連する他のすべてのコンピューターと同様に、ほとんどのスキルは口承伝承によって伝えられています。正規表現の洗練度はさまざまです。しかし、正規表現でデータを検索するわけではありません。データが多すぎて、テキスト形式ではありません。私たちは、他の皆と同じように、ログ、アドホック DB、コード、および中途半端なドキュメントを検索します。
dmckee

1
@FrustratedWithFormsDesigner、正規表現を知らないゲームプログラマーを雇うつもりはありません。プログラミングは、本質的に、分野に関係なく情報集約的です。あなたが何をするかは問題ではありません。どの分野でも、ソースコード、正規表現対応のテキストエディタ、ログファイルがあります。正規表現を使用しない、特定のタスクを実行する際の効率が大幅に低下します(出荷されたゲームで正規表現を1行記述する必要がない場合でも)。ゲームプログラマにとって正規表現が必要だと言っているのではありません。私はそれを知らなかった人を雇わないと言っているだけです。
ベン・リー

22

正規表現は、テキストのパターンを一致させる方法を表現する非常に簡潔な方法です。

テキストからデータを解析して抽出する、または一部のテキストが特定のパターンに適合していることを検証するという要件は、プログラミングで非常に頻繁に発生するため、それらについて学び、理解することが重要だと思います。

これらはツールボックスに入れるのに適したツールであり、経験のあるプログラマなら誰でも使用方法を知っていることを期待しています。

正規表現について学ぶための最良のリソースの1つは、Jeffery Friedlの本、Mastering Regular Expressionsです。それはかなり高度なので、さらに経験を積んだときに実際に読みたいかもしれません。

regular-expressions.infoでチュートリアルを開始できます。


2
これは私にとって好みの問題です。私は本当にそれらの必要性がありませんでした。私はいくつかのプロジェクトでそれらを使用しましたので、それらがどのように機能するかは知っていますが、それらを必要と感じているよりも頻繁に使用せずに誤用されることがありました。単純なパターンへとあなたにも複雑に文字列操作を使用するかもしれないし、それが(e)を使用するように高速ですBNF少なくともあなたは私のようなパーサでの作業に使用されている場合
ルーンFS

15

ここでの回答の大部分とは対照的に、正規表現の知識は生産的なプログラマーになるために必要なスキルではないと思います。ポジションの候補者にインタビューするとき、正規表現のスキルを自分から引き上げる必要があると感じたら、さらに深く掘り下げます。どうして?彼らは正しいハンマーが好きなので、しばしば場所で使用されますが、多くの場合、必要なのはドライバーでした。SOでHTMLと正規表現を検索すると、かなりの数の質問と、正規表現が不適切である理由がかなり表示されます。

適切なOODを実行する能力は、インタビュー対象者を雇用することを主張する前に必要です。正規表現の知識は確かにそうではありません。そして、実際には、正規表現は知っているが、使用されているフレームワークの分析、設計、知識などの分野に欠けている生産性の高いプログラマーであると信じている人はいないと思います

確かに便利な場合もありますが、プロの開発者としての20年以上で、コードで20回未満し​​か使用していなかったと思います(さらに、いくつかのperlスクリプトをコーディングしたこともあります)。しかし交換してください。


正規表現を知らないプログラマーは、正規表現が非常にうまく機能する場合にWTFの大きな山を作成することがよくあります。正規表現のみを知っているプログラマは、正規表現を使用して非正規言語(HTMLなど)を処理しようとするWTFの小さいながらも非常に誤った山を作成することがよくあります。
ケビンクライン

14

ほとんどのプログラミング言語はプレーンテキストとして記述されているため、作業しているドメインに関係なく、正規表現は知っておくと便利なツールです。したがって、Regexはソースコードを操作およびリファクタリングするための優れた方法であり、多くのテキストエディターに組み込まれています。正規表現がはるかに迅速かつ正確に変更を加える場合、無数のプログラマーがソースファイルに繰り返し変更を加えるのを見てきました。

これは、Pragmatic Programmerの第3章が「プログラミングの基本的な原材料」であるプレーンテキストについて述べていることです。


リファクタリングをサポートするIDEを使用しないのはなぜですか?
ニムチンプスキー

2
この投稿で質問をした場合、チェックマークを付けます。これが、正規表現を知らない人を雇うことのない最も重要な理由です。強力なコード編集およびログ検索ツールです。たとえそれを使用するコードを1行も書く必要がなくてもです。それを知らない人は、特定の毎日のタスクで桁違いに効率が悪くなるだろう。
ベン・リー

10

ジェフ・アトウッドは正規表現に関する素晴らしいブログを書きました。その中にはこの驚くべき引用があります:

Some people, when confronted with a problem, think "I know, I'll use regular 
expressions." Now they have two problems. [Jamie Zawinski]

また、スタックオーバーフローをチェックアウトしたいという良い質問に対する素晴らしい回答もあります。

あなたはそれについて決定的に少し知っておくべきです。正規表現は習得は簡単ですが、習得は困難です。あなたはそれを使い始めるためにそれについてすべてを学ぶ必要はありません。それについて賢明である。

 

tl; dr

いつ使用するかを適切に判断できるように、テクノロジーについて知る必要があります。


8

正規表現ライブラリが利用できない組み込みコードベースで作業しています。特定のタスクには275行のコードが必要で、テスターと開発者の間で行き来するすべてのコーナーケースをデバッグするのに約2週間かかりました。後で、javascriptユーティリティの一部と同じことを行う関数を作成しました。正確な正規表現を使用して、同じタスクは、コードの10行を使用し、約15分で完全に働きました。

正規表現が必要ですか?技術的にはそうではありませんが、効率的なツールを意図的に無知のままにしておくのは愚かです。


6

別の答えを引用するには:

正規表現は、テキストのパターンを一致させる方法を表現する非常に簡潔な方法です。

したがって、これが仕事の重要な部分である場合、おそらく開発中のシステムを設計するためのより良い方法があります。大量のテキストがあなたの地域に固有のドメイン(バイオインフォマティクスなど)でない限り。

私は3つの異なるエンタープライズシステム(10年間で3つの異なる企業)に取り組んできましたが、5回未満しか記述していません。これには、基本的な電子メール検証ツールのコピーと貼り付けが2回含まれます。


2
多くのテキストは常にドメイン固有です。あなたは結局プログラマーです。テキスト(ソースコードの形式)はドメインです。正規表現を使用してテキストを効率的に操作すると、より効率的なプログラマーになります。
クォンタイル

2
意味をなさない@量。あなたは実際に正規表現でソースコードを操作しますか?それは絶対的な悪夢のように聞こえます。正規表現はコードの一部であり、コードはドメイン固有のデータとやり取りします。
-NimChimpsky

3
私は正規表現でソースコードを操作します。手作業で大量のコードをリファクタリングするのは退屈でエラーが発生しやすくなります。正規表現の検索と置換をサポートするエディターを使用すると(ヒント:ほとんどすべてのエディターが正規表現の検索と置換をサポートする)、リファクタリングがはるかに簡単になります。
quanticle

3
@Dunkは、それがプロジェクトの存続期間にわたって大きな効率の向上であると言っているのではなく、短い期間で大きな利益を得ることができると言っています。また、数十のファイルに数百、数千もの変更があった場合のリファクタリングも行いました。プロジェクトの存続期間中、節約できる時間は取るに足りませんが、手作業で同じ変更を行うのにかかった時間や日を取りたくはありませんでした。現代のIDEでは、正規表現を記述しなくてもこの機能の一部を実行できますが、実行できない場合もあります(たとえば、一般的な割り当てパターンを再作成する)。
jmoreno

2
@NimChimpsky正規表現はどこでも動作します。IDEとリファクタリングツールは特定の言語でのみ機能します。たとえば、リファクタリングツールを使用して、すべてのテンプレートを調べ、電話番号のように見える文字列(sites.google.com/site/steveyegge2/…)を検索/削除できますか?
quanticle

4

正規表現は、非常に便利な言語間、プラットフォーム間、処理ツールと考えることができます。コードで正規表現を使用できます。エディターで正規表現を使用できます。コマンドラインで正規表現を使用できます。

それはあなたが必要とするだけではなく、それらを学ぶべきです。もっと似ている

うわー!正規表現が大好き!


4

優れたプログラマーになるために、小さな正規表現の癖をすべて知っている必要はありません。特に、それらはすべて異なる実装とプログラミング言語の周りで少し異なる傾向があるためです。あなたは何知っている必要があります

  • 正規表現と正規表現とは何ですか。
  • どのようなことを効率的に行うか(通常の言語の解析)
  • どのようなものが非効率的か(ネストされたものの解析、大量の後方参照の使用)
  • 構文の読み取りまたは書き込みが必要なときに構文に関する情報を取得する場所。

とにかく、そもそもそれらを習得するのに手間がかかるかどうかについて心配する必要さえありません。最も簡単な演算子(.*|()、など)は、ほぼ普遍的に存在していると行く長い道を!


これは本当に良い点だと思います。一部のREエンジンの後方参照およびその他の高度な機能の使用方法を知ることは、それほど有用ではありません。多くの場合、ほとんどの場合、REの使用と少しのロジックの組み合わせは、より読みやすく、保守が容易です。
マークベッシー

3

すでに述べたように、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行だけ

他の方法を使用すると、はるかに複雑になります


2
これは複雑ではありませんか?これは、標準の正規表現セットにはないいくつかの特別な機能を使用します。単純な長さと塗りつぶしはこれには問題ありません
ラチェットフリーク

2

それは必須ではありません。必要なのは、それらの存在とそれらをいつ使用するかを認識することだけです。構文の詳細は、Googleおよびオンラインツールを使用して簡単に見つけて正しく取得できます。


2

正規表現を学ぶことを本当にお勧めします。職場では、プログラマーを雇っているとき、正規表現を知らない候補者は一般にすぐに処分されます。正規表現を絶対に知る必要があるからではなく、プログラミングの理解レベルとプログラミング中毒のレベルを示す非常に良い指標だからです。

本物のプログラマは正規表現を知っている

ただし、私は主にWebプログラミングに携わっているため、これには少し偏りがあります。正規表現は、サーバー側とクライアント側の両方で頻繁に遭遇するものです。あなたが食器洗い機に組み込まれたシステムのアセンブリプログラマだった場合、正規表現に出くわすことはおそらくないでしょう。ただし、正規表現(検索と置換、ファイルの検索、複数のファイルの検索など)を知っていると、ほとんどの場合、開発環境をよりうまく活用できるので、おそらく便利です。

また、あなたがそれを知っているなら、仲間のプログラマーによって認められるのは簡単だと思うでしょう。


また、最初から完全な仕様を暗記するのは無意味です。多くの異なる方言があります。代わりに、基本の学習に集中してください。(1)いくつかの単純な正規表現を作成し、の意味を学習します。* + {} []()および-いくつかの基本クラス。(2)特定の仕様を手元に置いて、出会った正規表現で何が起こっているのかを理解してください。
アロンセダーホルム

yr web devではreg expsを何に使用しますか。それが私がしていることであり、10年で5回以上使用しています+。
-NimChimpsky

手始めに:ユーザー入力の解析または検証(電子メール、郵便番号/郵便番号、ユーザー検索フォームなど)。しかし、複数言語/ロケールのカスタムおよび可変翻訳文字列のためのI18nおよびl10nの目的にも。そして、彼らは間違いなく、いくつかのエラー検出と非常に多くのエラー処理の助けを得ています。また、CMS / blogs / commentsの世界ではwiki / forumマークアップ用です。外部データ(ユーザー入力、スクレイピングページ、同期リソースなど)の場合、コンテンツ/リンク/その他の解析、処理、および書き換え。さらに、すべての多くの統計情報の目的とロギング(ブラウザーの検出、リファラーの並べ替えなど)
アロンセダーホルム

-1そのようなめちゃくちゃ無知なコメント「本物のプログラマ...」
ダンク

ユーザー入力を検証するかなり表面的な方法であり、正規表現が100%正確であった場合は驚かされます(電子メールの検証が有名です)。そして、正規表現を使用して言語間で翻訳する「複数の言語/ロケールのカスタムおよび可変翻訳文字列」を理解していません-er wtf?統計目的-正規表現で統計を行いますか?リンク/コンテンツを正規表現で書き換えると、コードの匂いがします。
ニムチンプスキー

1

それは必須ですか?あなたは、あなたが知っていなければならないことをすでに知っています:それらが存在すること、それらが何であるか、そしてそれらが何のために使われるか。プログラマーとしてのあなたの仕事は問題を解決することです。これで、問題を解決するためのソリューションへのファクタリングを開始するのに十分な知識が得られました。正規表現を学ぶ必要がありますか?絶対に。優先順位はあなた次第です...毎日使用されるジョブと、決して使用されないジョブがあります。簡単なガイドは、遭遇すると予想される問題にどの程度のパターンマッチングが必要かということです。


1

うーん、この文字列のリストをコンマで区切って出力する必要があります。セパレーター引数を取るforループを含む関数を作成し、それらを一緒に追加し続けます...またはこの既存の「結合」コマンドを使用することができます。

各オブジェクトが持っているいくつかの属性に基づいて、これらの複雑なオブジェクトに並べ替える必要があります。それを行う並べ替え関数の作成方法を思い出させてください。この言語がサポートする既存の標準並べ替え関数を使用できます。カスタムコンパレータの作成方法を学習する必要がありますが、それほど難しくはないはずです。明らかに、独自の並べ替え関数を維持するよりはましです。

私は仮想メソッドのアイデアに少し怖がっていますが、それはこれらのリストを、異なるタイプのアイテムごとに単一のリストに減らすのに役立つはずです。次に、各リストを異なる方法で処理する同様のステートメントを半ダース書く必要はありません。私のコードはもっとシンプルできれいになるので、一生懸命勉強してそれらを学ぶべきだと思います。

このテキストファイルから、この他のすべてのノイズの中でこれらの単語と値のペアを抽出する必要があります。50行のパーサーを作成して、文字を1つずつ読み取り、文字の1つが私の始まりのように見える場合この状態変数を設定して、異なる方法で解析を開始するなどを探します...もちろん、私の場合は明らかに特別なので、誰もこのような問題に遭遇したことがなく、1行を取る一般的なソリューションを発明しましたそれを行うためのコードの。それは、私が決して読んだことのないプログラミング本を古本屋に持って行くべきだと思い出させてくれます。


1

短い答え:いいえ。...知識は力です。

私はウェブ開発者であり、私が一般的に必要とする正規表現はすでに私のために書かれています。しかし、私はコピー&ペーストに問題があり、それが何をしていたのかわからないので、何でもコピー&ペーストする危険があります。

1つの例:コピーして貼り付けたメールの正規表現では、メールアドレスの仕様で許可されているメールではピリオドまたはプラスが許可されませんでした。実際、多くの人々が実際のemail+sitename@gmail.comでgmailを使用しているため、スパムを選択した場合に「sitename」のフィルタリングが容易になります。


0

正規表現?うーん...時にはそれらを知ることは有用ですが、ほとんどの場合、常に同じものを使用します。私はかなり頻繁に正規表現を使用しましたが、私はそれが得意だとは言いません。私はそれがまったく好きではなく、正規表現よりも知っておくべき重要なことがあると思います。

しかし、フォーミュラまたはデータの検証では非常に便利です。ほとんどすべてのプロのフォームは正規表現で検証されていると思います。それを使用するASP.NET。

しかし、まったく:必要なときに式を実行して保存してください。うまくいけば、それらを複数回使用します。しかし、RegExで時間を無駄にしないでください!


0

作業している地域/プラットフォームによって異なります

  1. デスクトップアプリケーションの場合、正規表現について何も知らなくてもクールな生活を送ることができます。ただし、Visual Studioには正規表現検索機能がありますが、だれかがそれを定期的に使用しているのでしょうか。私は考えていません(検索を行うことができるため、最初に正規表現を修正する必要があります:))。

  2. Web開発者は、おそらく正規表現を学ぶ必要があります。必要なだけのコードスニペットをオンラインで簡単に見つけることができますが、学習することで助けになるので、それを回避できます。

正規表現が不可欠なツールであるドキュメント、訴訟、法的事項などの領域があります。あなたはそれを知る必要があります。そうしないと、単純に仕事を得ることができません。

要するに、それが職務記述書の一部でない場合、それについてさえ気にしないでください。あなたがそれを学びたいなら、楽しみのためにそれを学んでください。


0

正規表現は非常に便利なツールであり、プログラマーが正規表現を使用する必要がある状況はたくさんあります。使用するためにそれらをすべて暗記するべきではありません。参照を使用してタスクを実行するだけです。正規表現を使用した10-20-50-100(プログラマーに依存)タスクの後、それらをすべて暗記します。それらは自分で学んでいるので、特別に学ぶべきではありません。


0

私はすでにこれまで多くの回答を参照して、それらはすべてとして正規表現を知ることのメリットについてのように見えるツールプログラマのツールボックスインチ

私は、正規表現を、コンピューターがどのように機能するかについての理解を深める一種の知識と考えることを好みます。誰かが通常の言語とは何かを本当に理解し、3つの簡単な操作で表現できるとしたら、単純な文字列を検証するための単なるツールを超えた何かを提供できると思います。

解析全般をよりよく理解できるようになります。これは、あらゆる種類のプログラミングに役立ち、定期的に使用するツール(コンパイラー、エディター、ブラウザーなど)の動作をよりよく理解できます。

正規表現を使用することの実際的な利点は、もちろん膨大です。あなたが彼らと「プログラム」しなくても-私はいつもエディタで検索/置換を行う正規表現を使用し、どれだけ生産的になるかを測定します。

したがって、それは必要ではありませんが、プログラマーが学ぶべき最初のツールの1つだと思います。


0

ロブ・パイク はそうは思わない

正規表現は書くのが難しく、うまく書くのが難しく、他の技術に比べて高価になる可能性があります。標準の字句解析および解析手法は非常に簡単に記述でき、一般的であり、順応性が高いため、正規表現を使用する理由はありません。

別の見方をすると、レクサーと構文解析は静的に定義されたパターンに一致しますが、正規表現の強みはパターンを動的に表現する方法を提供することです。テキストエディターと検索ツールには優れていますが、コンパイル時に探しているものがすべてわかっている場合、正規表現は必要以上に一般性と柔軟性をもたらします。

すべてのテキスト処理問題の万能薬として正規表現を奨励することは、怠laで貧弱なエンジニアリングであるだけでなく、それらをまったく使用すべきでない人々による使用を強化します。

もちろん、パイクが場所を持っていることを認めていることに注意してくださいそれら。しかし、本当の問題は、それらがバンドエイドであり、私が必要以上に字句解析と構文解析についての知識を減らすことを可能にしたことである可能性があります。:)


0

正規表現は多くの場合、仕事に適したツールであり、特に多くのテキスト処理を行うアプリケーションでは非常に便利です。しかし、それらを覚えることは狂気です。特殊文字、アンカー、キャラクタークラス、パターン修飾子、メタキャラクターがすべて含まれているチートシートが壁に固定されています。他のすべての追跡。必要なのは、必要なときに正規表現を書くことができることです。通常は約6か月ごとです。仕事に使用するのに最適なツールである問題に遭遇するのと同じくらいの頻度です。Perl、Latex、Emacs、または他の重いテキスト処理チームに所属していない限り。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.