ホームページ > バックエンド開発 > Golang > 正規表現でキャプチャ グループ「1W」が定義されていない場合、Go の ReplaceAllString 関数は「$1W」の置換をどのように処理しますか?

正規表現でキャプチャ グループ「1W」が定義されていない場合、Go の ReplaceAllString 関数は「$1W」の置換をどのように処理しますか?

Mary-Kate Olsen
リリース: 2024-10-30 03:05:03
オリジナル
442 人が閲覧しました

How does Go's ReplaceAllString function handle the replacement of

Go の ReplaceAllString 関数の出力を理解する

Go の ReplaceAllString 関数は、文字列内の正規表現の一致をすべて置換する方法を提供します。提供されているコード例の最初の出力は理解するのが簡単ですが、その後の出力は不可解に見えるかもしれません。

出力 2 と 4: $1 後方参照を理解する

2 番目4 番目の出力、$1 は、正規表現 a(x)b の最初のかっこのセットで定義されたキャプチャ グループを指します。このキャプチャ グループは、任意の数の「x」文字で構成される文字列を照合してキャプチャします。

  • 出力 2 (fmt.Println(re.ReplaceAllString("-ab-axxb-", "$1) ")))、$1 はキャプチャされた 'x' 文字の文字列 (--xx-) に置き換えられます。
  • 出力 4 (fmt.Println(re.ReplaceAllString("-ab-axxb-", "${1}W")))、$1 は同じキャプチャされた文字列に置き換えられますが、中括弧 (-W-xxW-) で囲まれています。

出力 3: $1 についてW

3 番目の出力 (fmt.Println(re.ReplaceAllString("-ab-axxb-", "$1W"))) が最も興味深いです。 ReplaceAllString のドキュメントには、置換パターン内の "$ 記号" は Expand 関数のように解釈されると記載されています:

repl 内では、$ 記号は Expand

Expand は以下を指定します:

テンプレートでは、変数は $name または ${name} 形式の部分文字列で表されます。ここで、name は空ではない文字、数字のシーケンスです。 、およびアンダースコア。

​​範囲外または一致しないインデックス、または正規表現に存在しない名前への参照は、空のスライスに置き換えられます。
$name フォームでは、名前は次のように解釈されます。可能な限り長く: $1x は ${1}x ではなく ${1x} と同等、$10 は ${1}0 ではなく ${10} と同等です。


この例では、$1W は可能な限り長く取られるため、${1W} と同等です。ただし、正規表現にはキャプチャグループ1Wが定義されていません。これは、照合操作中にこのインデックスが設定されなかったことを意味するため、「範囲外」または「一致しない」インデックスとみなされます。したがって、$1W は置換フェーズ中に

空の文字列 ("") に置き換えられます。

以上が正規表現でキャプチャ グループ「1W」が定義されていない場合、Go の ReplaceAllString 関数は「$1W」の置換をどのように処理しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート