Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

[インデックス 15125] ファイルの概要

このコミットは、Go言語の標準ライブラリであるregexpパッケージ内の(*Regexp).Longestメソッドに関するコメントの更新を行っています。具体的には、正規表現のマッチングセマンティクスである「leftmost-longest」の振る舞いをより明確に説明するために、コメントの文言が修正されています。

コミット

commit 5fad7864521805c31d725ab156d02ac633610367
Author: Andrew Gerrand <adg@golang.org>
Date:   Mon Feb 4 15:57:32 2013 +1100

    regexp: update comment on (*Regexp).Longest
    
    Missed this review comment.
    
    R=golang-dev, rsc
    CC=golang-dev
    https://golang.org/cl/7229084

GitHub上でのコミットページへのリンク

https://github.com/golang/go/commit/5fad7864521805c31d725ab156d02ac633610367

元コミット内容

このコミットは、regexpパッケージのregexp.goファイルにおいて、(*Regexp).Longestメソッドのドキュメンテーションコメントを修正しています。

変更の背景

コミットメッセージによると、「Missed this review comment.」とあり、以前のコードレビューで指摘されたコメントの修正を反映したものです。これは、Longestメソッドの動作に関する説明が不正確または不明瞭であったため、その説明を改善する必要があったことを示唆しています。ドキュメンテーションの正確性は、ライブラリの利用者にとって非常に重要であり、誤解を招く可能性のある記述は修正されるべきです。

前提知識の解説

Go言語のregexpパッケージ

Go言語の標準ライブラリには、正規表現を扱うためのregexpパッケージが含まれています。このパッケージは、Perlのような正規表現構文(RE2構文)をサポートしており、文字列の検索、置換、分割など、様々な正規表現操作を提供します。

正規表現のマッチングセマンティクス

正規表現エンジンは、与えられた文字列に対してパターンをどのようにマッチさせるかについて、いくつかの異なるセマンティクス(意味論)を持っています。主なものとして「leftmost-first」と「leftmost-longest」があります。

  • Leftmost-first (最左優先): これは多くの正規表現エンジン(Perl、Python、Javaなど)で採用されているデフォルトのセマンティクスです。文字列の最も左側でマッチするものを探し、その中で最も早く見つかった(最短の)マッチを採用します。
  • Leftmost-longest (最左最長): これはGo言語のregexpパッケージがデフォルトで採用しているセマンティクスです。文字列の最も左側でマッチするものを探し、その中で最も長いマッチを採用します。例えば、正規表現 /a+/ が文字列 aaaa に適用された場合、leftmost-firstでは a がマッチするかもしれませんが、leftmost-longestでは aaaa 全体がマッチします。

(*Regexp).Longestメソッド

regexpパッケージにおいて、Regexp型のLongestメソッドは、正規表現のマッチングセマンティクスを「leftmost-longest」に設定するために使用されます。Goのregexpパッケージはデフォルトでleftmost-longestセマンティクスを使用しますが、このメソッドを呼び出すことで、明示的にその振る舞いを保証したり、あるいは他のセマンティクス(例えばFindStringなどのメソッドはleftmost-firstに近い振る舞いをすることがある)からleftmost-longestに戻したりするために使われます。

技術的詳細

このコミットは、src/pkg/regexp/regexp.goファイル内の(*Regexp).Longestメソッドのコメントを修正しています。

変更前: // Longest sets the match semantics of the regexp to leftmost-longest.

変更後: // Longest makes future searches prefer the leftmost-longest match.

この変更は、単なるコメントの修正ですが、その意味合いは重要です。

  • 変更前: 「Longestは正規表現のマッチングセマンティクスをleftmost-longestに設定する」と記述されていました。これは、このメソッドが正規表現オブジェクト自体の内部状態を変更し、その後のすべてのマッチング操作に影響を与えるかのように読めます。
  • 変更後: 「Longestは将来の検索がleftmost-longestマッチを優先するようにする」と記述されています。この表現はより正確です。Longestメソッドは、Regexpオブジェクトの内部にleftmost-longestセマンティクスを使用するというフラグを設定します。これにより、そのRegexpオブジェクトを使って実行されるその後の検索FindFindAllなどのメソッド呼び出し)が、leftmost-longestのルールに従って結果を返すようになります。これは、メソッドが「設定する」というよりも、「その後の振る舞いを決定する」というニュアンスを強調しています。

この修正は、ドキュメンテーションの正確性を高め、開発者がLongestメソッドの実際の効果をより正確に理解できるようにすることを目的としています。特に、Goのregexpパッケージがデフォルトでleftmost-longestセマンティクスを採用していることを考えると、このメソッドの役割は、そのセマンティクスを明示的に適用したり、他のセマンティクスが適用された後に戻したりすることにあるため、コメントの明確化は重要です。

コアとなるコードの変更箇所

--- a/src/pkg/regexp/regexp.go
+++ b/src/pkg/regexp/regexp.go
@@ -130,7 +130,7 @@ func CompilePOSIX(expr string) (*Regexp, error) {
 	return compile(expr, syntax.POSIX, true)
 }
 
-// Longest sets the match semantics of the regexp to leftmost-longest.
+// Longest makes future searches prefer the leftmost-longest match.
 // That is, when matching against text, the regexp returns a match that
 // begins as early as possible in the input (leftmost), and among those
 // it chooses a match that is as long as possible.

コアとなるコードの解説

変更されたのは、regexp.goファイル内のLongestメソッドのドキュメンテーションコメントの最初の行です。

元のコメント: // Longest sets the match semantics of the regexp to leftmost-longest.

修正後のコメント: // Longest makes future searches prefer the leftmost-longest match.

この変更は、Longestメソッドが正規表現オブジェクトの内部状態を直接「設定」するというよりも、そのオブジェクトを使用した「将来の検索」の振る舞いに影響を与えるというニュアンスを強調しています。これにより、メソッドの機能がより正確に伝わるようになります。

コメントの残りの部分は変更されていません。 // That is, when matching against text, the regexp returns a match that // begins as early as possible in the input (leftmost), and among those // it chooses a match that is as long as possible. この部分は、leftmost-longestマッチングセマンティクスが具体的に何を意味するのかを詳細に説明しており、非常に明確です。

関連リンク

参考にした情報源リンク

[インデックス 15125] ファイルの概要

このコミットは、Go言語の標準ライブラリであるregexpパッケージ内の(*Regexp).Longestメソッドに関するコメントの更新を行っています。具体的には、正規表現のマッチングセマンティクスである「leftmost-longest」の振る舞いをより明確に説明するために、コメントの文言が修正されています。

コミット

commit 5fad7864521805c31d725ab156d02ac633610367
Author: Andrew Gerrand <adg@golang.org>
Date:   Mon Feb 4 15:57:32 2013 +1100

    regexp: update comment on (*Regexp).Longest
    
    Missed this review comment.
    
    R=golang-dev, rsc
    CC=golang-dev
    https://golang.org/cl/7229084

GitHub上でのコミットページへのリンク

https://github.com/golang/go/commit/5fad7864521805c31d725ab156d02ac633610367

元コミット内容

このコミットは、regexpパッケージのregexp.goファイルにおいて、(*Regexp).Longestメソッドのドキュメンテーションコメントを修正しています。

変更の背景

コミットメッセージによると、「Missed this review comment.」とあり、以前のコードレビューで指摘されたコメントの修正を反映したものです。これは、Longestメソッドの動作に関する説明が不正確または不明瞭であったため、その説明を改善する必要があったことを示唆しています。ドキュメンテーションの正確性は、ライブラリの利用者にとって非常に重要であり、誤解を招く可能性のある記述は修正されるべきです。

前提知識の解説

Go言語のregexpパッケージ

Go言語の標準ライブラリには、正規表現を扱うためのregexpパッケージが含まれています。このパッケージは、Perlのような正規表現構文(RE2構文)をサポートしており、文字列の検索、置換、分割など、様々な正規表現操作を提供します。

正規表現のマッチングセマンティクス

正規表現エンジンは、与えられた文字列に対してパターンをどのようにマッチさせるかについて、いくつかの異なるセマンティクス(意味論)を持っています。主なものとして「leftmost-first」と「leftmost-longest」があります。

  • Leftmost-first (最左優先): これは多くの正規表現エンジン(Perl、Python、Javaなど)で採用されているデフォルトのセマンティクスです。文字列の最も左側でマッチするものを探し、その中で最も早く見つかった(最短の)マッチを採用します。
  • Leftmost-longest (最左最長): これはGo言語のregexpパッケージがデフォルトで採用しているセマンティクスです。文字列の最も左側でマッチするものを探し、その中で最も長いマッチを採用します。例えば、正規表現 /a+/ が文字列 aaaa に適用された場合、leftmost-firstでは a がマッチするかもしれませんが、leftmost-longestでは aaaa 全体がマッチします。

(*Regexp).Longestメソッド

regexpパッケージにおいて、Regexp型のLongestメソッドは、正規表現のマッチングセマンティクスを「leftmost-longest」に設定するために使用されます。Goのregexpパッケージはデフォルトでleftmost-longestセマンティクスを使用しますが、このメソッドを呼び出すことで、明示的にその振る舞いを保証したり、あるいは他のセマンティクス(例えばFindStringなどのメソッドはleftmost-firstに近い振る舞いをすることがある)からleftmost-longestに戻したりするために使われます。

技術的詳細

このコミットは、src/pkg/regexp/regexp.goファイル内の(*Regexp).Longestメソッドのコメントを修正しています。

変更前: // Longest sets the match semantics of the regexp to leftmost-longest.

変更後: // Longest makes future searches prefer the leftmost-longest match.

この変更は、単なるコメントの修正ですが、その意味合いは重要です。

  • 変更前: 「Longestは正規表現のマッチングセマンティクスをleftmost-longestに設定する」と記述されていました。これは、このメソッドが正規表現オブジェクト自体の内部状態を変更し、その後のすべてのマッチング操作に影響を与えるかのように読めます。
  • 変更後: 「Longestは将来の検索がleftmost-longestマッチを優先するようにする」と記述されています。この表現はより正確です。Longestメソッドは、Regexpオブジェクトの内部にleftmost-longestセマンティクスを使用するというフラグを設定します。これにより、そのRegexpオブジェクトを使って実行されるその後の検索FindFindAllなどのメソッド呼び出し)が、leftmost-longestのルールに従って結果を返すようになります。これは、メソッドが「設定する」というよりも、「その後の振る舞いを決定する」というニュアンスを強調しています。

この修正は、ドキュメンテーションの正確性を高め、開発者がLongestメソッドの実際の効果をより正確に理解できるようにすることを目的としています。特に、Goのregexpパッケージがデフォルトでleftmost-longestセマンティクスを採用していることを考えると、このメソッドの役割は、そのセマンティクスを明示的に適用したり、他のセマンティクスが適用された後に戻したりすることにあるため、コメントの明確化は重要です。

コアとなるコードの変更箇所

--- a/src/pkg/regexp/regexp.go
+++ b/src/pkg/regexp/regexp.go
@@ -130,7 +130,7 @@ func CompilePOSIX(expr string) (*Regexp, error) {
 	return compile(expr, syntax.POSIX, true)
 }
 
-// Longest sets the match semantics of the regexp to leftmost-longest.
+// Longest makes future searches prefer the leftmost-longest match.
 // That is, when matching against text, the regexp returns a match that
 // begins as early as possible in the input (leftmost), and among those
 // it chooses a match that is as long as possible.

コアとなるコードの解説

変更されたのは、regexp.goファイル内のLongestメソッドのドキュメンテーションコメントの最初の行です。

元のコメント: // Longest sets the match semantics of the regexp to leftmost-longest.

修正後のコメント: // Longest makes future searches prefer the leftmost-longest match.

この変更は、Longestメソッドが正規表現オブジェクトの内部状態を直接「設定」するというよりも、そのオブジェクトを使用した「将来の検索」の振る舞いに影響を与えるというニュアンスを強調しています。これにより、メソッドの機能がより正確に伝わるようになります。

コメントの残りの部分は変更されていません。 // That is, when matching against text, the regexp returns a match that // begins as early as possible in the input (leftmost), and among those // it chooses a match that is as long as possible. この部分は、leftmost-longestマッチングセマンティクスが具体的に何を意味するのかを詳細に説明しており、非常に明確です。

関連リンク

参考にした情報源リンク