ホームページ >バックエンド開発 >Golang >Ruby のキャプチャ グループ機能を Go Regex で複製するにはどうすればよいですか?

Ruby のキャプチャ グループ機能を Go Regex で複製するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-18 18:14:12803ブラウズ

How to Replicate Ruby's Capturing Group Functionality in Go Regex?

Go Regex で Ruby キャプチャ グループ機能をエミュレートする方法

Ruby から Go にコードを移行する場合、正規表現の互換性が課題になることがあります。 Ruby は PCRE を利用するのに対し、Go は Google の RE2 を利用するため、開発者は表現を適応させる方法が必要になります。

具体的には、一致したパターンから特定のデータを抽出できるグループ機能のキャプチャが課題となります。 Go でこの機能を複製するには、次の手順を実行できます。

  1. 名前付きキャプチャ グループを使用する:
    Ruby キャプチャ グループで使用されている括弧を構文 (?たとえば、P の後にパターンを付けると、(?< Year>d{4}) となります。 (?P< Year>d{4}).
  2. 相互参照グループ名:
    コンパイルされた正規表現で SubexpNames() メソッドを呼び出して、キャプチャのリストを取得します。この情報は、後でキャプチャされたデータを抽出するために使用されます。
  3. グループを使用した抽出名前:
    特定のグループからデータを取得するには、構文 r.FindStringSubmatch(s)[groupName] を使用します。r はコンパイルされた正規表現、s は入力文字列、groupName はグループの名前です。

たとえば、正規表現を使用して日付文字列から年を抽出するには(?Pd{4})-(?Pd{2})-(?Pd{2}) の場合、次のコードを使用します:

package main

import (
    "fmt"
    "regexp"
)

func main() {
    r := regexp.MustCompile(`(?P<Year>\d{4})-(?P<Month>\d{2})-(?P<Day>\d{2})`)
    fmt.Printf("%#v\n", r.FindStringSubmatch(`2015-05-27`))
    fmt.Printf("%#v\n", r.SubexpNames())
}

このコードは次のように出力します:

[]string{"2015", "05", "27"}
[]string{""}

最初の行にはキャプチャされた値が順番に表示され、2 行目にはキャプチャ グループが表示されます。名前。これらの手法を使用すると、Ruby と同様のキャプチャ グループ機能を Go で実現できます。

以上がRuby のキャプチャ グループ機能を Go Regex で複製するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。