JavaScriptの正則にもシングルモードがあります。
正規表現は、1970年に彼が改善したQEDエディタでKen Thompsonによって最初に実現されました。正規表現の中で最も簡単な元文字「.」は、改行符以外の任意の文字です。
「.」is a reglar expression which maches any character except
上記の言葉はQEDは1970年の公式文書です。です。これは史上初の正則文書かもしれません。
なぜこのように規定されていますか?QEDは行単位でファイルを編集しています。行の区切りもこの行の内容に含まれています。例えば、一部のコードの中のすべての単一行のコメントを削除したいなら、QEDでは次のようなコマンドが使えます。
Nodeではなく、ファイルを読み込むのは普通は完全なファイルです。Perlは多くのLinuxコマンドを引き継いで、行ごとにファイルを読み込むという伝統があります。
Perlで単行モードを開くためのs修饰符の公式記述は「Treat the string as single line」であり、この「single line」は、普通のモードでは行内文字にしかマッチしないので、行をまたぐことができないということを理解してください。一方の行モードでは、複数行の文字列を1行として見ているふりをして、その中の改行符を行内文字として見ていますので、「.」も該当します。もっと形象的に言えば、下の3行のテキストを
しかし、同じような理由で(文字列変数は複数行のテキストを含むことができます)Perlはまた、マルチラインモードである「Treat the string as multiples」という公式表現を発明しました。このモードはJavaScriptの正則にも古くからあります。この「複数行」の意味は、文字列の中の改行記号の前後の位置にはデフォルトでは一致しないということです。つまり文字列は永遠に1行だけと考えられています。複数行モードをオンにするとマッチします。
つまり、1行のモードと複数行のモードは異なる元の文字に対してで、ちょうど正則に接触する人はいずれも“1行のモード”と“多行のモード”のこの2つが見たところ対応する概念で、実際には関連していない名詞は気絶します。
その後、Rubyの著者は、「シングルモード」という正則用語が悪いと思っているかもしれません。特殊な独行は、「.」を改行符に合わせるパターンを「マルチラインモード」と呼んでいます。つまり、*などの正規表現が複数行にマッチするので、完全に分かります。修子も/m(RubyではデフォルトでPerlの「マルチラインモード」をオンします。だから/mは使われていませんでした。これは本当に雪上の霜で、もっと乱れました。
その後、Pythonの作者も「シングルモード」という呼び方を避けるべきだと思い、新しい名前の「dotall」をつけました。つまりdotをすべての文字の意味に合わせて、いい名前にしました。その後、Javaもこの名前を使いました。
上記の歴史を振り返ってみました。次のシングルモデルの由来と次のシングルモデルの名前がよくないと説明しました。V 8は最近、ステージ3のES提案を実現したばかりです。 https://github.com/mathiasbynens/es-regexp-dotall-flag、この提案はJavaScriptの正則によって/s修饰符とdotAll属性を導入しました。dotAll属性はPythonとJavaを勉強しました。JavaScriptにおけるSの具体的な効果は、「.」をマッチングさせる前にマッチングできなかった4つの行の終端:(改行)、r(回車)、u 2028(行分離子)、u 2029(段落区切り記号):
しかし、最初にシングルラインモードとマルチラインモードという混淆されやすい概念を導入したPerl言語は、すでにPerl 6から完全に削除されました。この2つのパターンは「.」のデフォルトでは改行符にマッチします。と$は常に文字列の先頭にマッチしますが、新しく^^と$の2つの要素文字を導入して、行の先頭にマッチします。
過去に私達がよく使っていたシングルモデルの代替品[^]あるいは[\s\S]も全く役に立たなくなりました。例えばJavaScript正則を使っているエディタの中(VS Code、Atom)では、シングルモードを開くためのインターフェースを提供することはあまりできません。しかし、エディタの正則機能といえば、JavaScriptで実現されるエディタの正則機能はまだ弱いです。例えば、Sublime(Python正則を使う)では正則の内部でいくつかのモードを開くことができません。s)dotallモードを開くことができます。例えば、使えます。s)/\*.+?\*/すべての複数行のコメントにマッチします。
「.」is a reglar expression which maches any character except
上記の言葉はQEDは1970年の公式文書です。です。これは史上初の正則文書かもしれません。
なぜこのように規定されていますか?QEDは行単位でファイルを編集しています。行の区切りもこの行の内容に含まれています。例えば、一部のコードの中のすべての単一行のコメントを削除したいなら、QEDでは次のようなコマンドが使えます。
1,$s#//.*##
「.」が改行にマッチすると、改行も削除され、これらの行が次の行にマージされることがあります。これは通常私たちが望んだ結果ではないので、「.」は最初に発明されたときに改行にマッチしないように設計されています。現在のオペレーティングシステムにはQEDコマンドがありません。テストさせていただきましたが、VIMもあります。Nodeではなく、ファイルを読み込むのは普通は完全なファイルです。Perlは多くのLinuxコマンドを引き継いで、行ごとにファイルを読み込むという伝統があります。
while (<>) {print $_}
_。の末尾にも改行符がありますので、Perlは自然にQEDの「.」と改行符に合わない規定を継承しています。しかし、Perlはあくまでもドアプログラミング言語であり、エディタではなく、その正則にマッチするオブジェクトは単一行のテキストだけでなく、複数行のテキストかもしれないので、その正則においては、「.」は行をまたいでマッチングする必要があるので、Perlは正則のシングルラインモード/sを発明しました。つまり、「.」も改行にマッチすることができます。Perlで単行モードを開くためのs修饰符の公式記述は「Treat the string as single line」であり、この「single line」は、普通のモードでは行内文字にしかマッチしないので、行をまたぐことができないということを理解してください。一方の行モードでは、複数行の文字列を1行として見ているふりをして、その中の改行符を行内文字として見ていますので、「.」も該当します。もっと形象的に言えば、下の3行のテキストを
1
2
3
「123」行のテキストとして、シングルモードとはこの意味です。しかし、同じような理由で(文字列変数は複数行のテキストを含むことができます)Perlはまた、マルチラインモードである「Treat the string as multiples」という公式表現を発明しました。このモードはJavaScriptの正則にも古くからあります。この「複数行」の意味は、文字列の中の改行記号の前後の位置にはデフォルトでは一致しないということです。つまり文字列は永遠に1行だけと考えられています。複数行モードをオンにするとマッチします。
つまり、1行のモードと複数行のモードは異なる元の文字に対してで、ちょうど正則に接触する人はいずれも“1行のモード”と“多行のモード”のこの2つが見たところ対応する概念で、実際には関連していない名詞は気絶します。
その後、Rubyの著者は、「シングルモード」という正則用語が悪いと思っているかもしれません。特殊な独行は、「.」を改行符に合わせるパターンを「マルチラインモード」と呼んでいます。つまり、*などの正規表現が複数行にマッチするので、完全に分かります。修子も/m(RubyではデフォルトでPerlの「マルチラインモード」をオンします。だから/mは使われていませんでした。これは本当に雪上の霜で、もっと乱れました。
その後、Pythonの作者も「シングルモード」という呼び方を避けるべきだと思い、新しい名前の「dotall」をつけました。つまりdotをすべての文字の意味に合わせて、いい名前にしました。その後、Javaもこの名前を使いました。
上記の歴史を振り返ってみました。次のシングルモデルの由来と次のシングルモデルの名前がよくないと説明しました。V 8は最近、ステージ3のES提案を実現したばかりです。 https://github.com/mathiasbynens/es-regexp-dotall-flag、この提案はJavaScriptの正則によって/s修饰符とdotAll属性を導入しました。dotAll属性はPythonとJavaを勉強しました。JavaScriptにおけるSの具体的な効果は、「.」をマッチングさせる前にマッチングできなかった4つの行の終端:(改行)、r(回車)、u 2028(行分離子)、u 2029(段落区切り記号):
/foo/s.dotAll // true
/^.{4}$/s.test("
\r\u2028\u2029") // true
実は簡単なものですが、JavaScript以外の正規の学生がその時にこの新しいモードを勉強したら困惑するかもしれません。ここでもう一度明らかにします。マルチラインモードは^と$の表現を制御しています。シングルモードは「.」の表現を制御しています。両者は直接関係がありません。しかし、最初にシングルラインモードとマルチラインモードという混淆されやすい概念を導入したPerl言語は、すでにPerl 6から完全に削除されました。この2つのパターンは「.」のデフォルトでは改行符にマッチします。と$は常に文字列の先頭にマッチしますが、新しく^^と$の2つの要素文字を導入して、行の先頭にマッチします。
過去に私達がよく使っていたシングルモデルの代替品[^]あるいは[\s\S]も全く役に立たなくなりました。例えばJavaScript正則を使っているエディタの中(VS Code、Atom)では、シングルモードを開くためのインターフェースを提供することはあまりできません。しかし、エディタの正則機能といえば、JavaScriptで実現されるエディタの正則機能はまだ弱いです。例えば、Sublime(Python正則を使う)では正則の内部でいくつかのモードを開くことができません。s)dotallモードを開くことができます。例えば、使えます。s)/\*.+?\*/すべての複数行のコメントにマッチします。