Go の ReplaceAllString メソッドの置換パターンをどのように理解していますか?

Linda Hamilton
リリース: 2024-10-28 02:45:30
オリジナル
825 人が閲覧しました

How do you understand the replacement patterns in Go's ReplaceAllString method?

Go の ReplaceAllString メソッドを理解する

Go では、regexp パッケージの ReplaceAllString メソッドを使用して、文字列内の一致する部分文字列を置換できます。この機能は、正規表現を使用する場合に洞察力が得られます。

提供された例では、このメソッドを使用してさまざまなシナリオを実証しようとしています。

<code class="go">package main

import (
    "fmt"
    "regexp"
)

func main() {
    re := regexp.MustCompile("a(x*)b")
    fmt.Println(re.ReplaceAllString("-ab-axxb-", "T"))
    fmt.Println(re.ReplaceAllString("-ab-axxb-", ""))
    fmt.Println(re.ReplaceAllString("-ab-axxb-", "W"))
    fmt.Println(re.ReplaceAllString("-ab-axxb-", "W"))
}</code>
ログイン後にコピー

最初の出力は単純です:

-T-T-
ログイン後にコピー

しかし、残りの 3 つの出力は混乱を引き起こします:

--xx-
---
-W-xxW-
ログイン後にコピー

置換パターンを理解する

ReplaceAllString のドキュメントでは、置換内に "$" 記号があると説明されています。

Expand は、テンプレート内の変数参照を "$name" または "${name}" 形式の部分文字列として定義します。ここで、"name" は空ではありません。文字のシーケンス (文字、数字、またはアンダースコア)。重要なのは、変数は可能な限り長いシーケンスを参照するため、「$1x」は「${1}x」ではなく「${1x}」と等しいということです。

3 番目の置換

3 回目の置換では、「$1W」は「${1W}」として扱われます。ただし、このグループは初期化されておらず、正規表現に対応する一致がありません。その結果、グループは空の文字列に置き換えられます。

2 番目と 4 番目の置換

対照的に、2 番目と 4 番目の置換は理解しやすいです。 "$1" は、最初のキャプチャ グループ (かっこで囲まれた) によってキャプチャされた文字を参照します。

置換パターンの曖昧さの回避

一貫した結果を達成するには、名前付きキャプチャを使用できます。 、正規表現パターンでは「?P...」として示されます。これにより、明確な参照のためにキャプチャ グループに明示的に名前が付けられます。

動作中の名前付きキャプチャ

名前付きキャプチャを導入する変更された例を次に示します。

<code class="go">package main

import (
    "fmt"
    "regexp"
)

func main() {
    re := regexp.MustCompile("a(?P<1W>x*)b")
    fmt.Println(re.ReplaceAllString("-ab-axxb-", "T"))
    fmt.Println(re.ReplaceAllString("-ab-axxb-", ""))
    fmt.Println(re.ReplaceAllString("-ab-axxb-", "W"))
    fmt.Println(re.ReplaceAllString("-ab-axxb-", "W"))
}</code>
ログイン後にコピー

出力の一貫性が保証されるようになりました:

-T-T-
--xx-
--xx-
-W-xxW-
ログイン後にコピー

以上がGo の ReplaceAllString メソッドの置換パターンをどのように理解していますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!