[解決済み] Goの正規表現でキャプチャグループ機能を取得する方法
2023-04-29 04:10:55
質問
Ruby から Go にライブラリを移植しているのですが、Ruby の正規表現が Go と互換性がないことがわかりました (RE2 でググってみてください)。Ruby & Java (さらに、他の言語は PCRE 正規表現 (グループをキャプチャすることをサポートする perl 互換) を使用します) であることに気づいたので、Go でコンパイルできるように私の式を書き直す必要があります。
たとえば、次のような正規表現があります。
`(?<Year>\d{4})-(?<Month>\d{2})-(?<Day>\d{2})`
といった入力を受け付けるようにします。
2001-01-20
キャプチャグループにより、年、月、日を変数にキャプチャすることができます。各グループの値を取得するのは非常に簡単で、返されたマッチングデータにグループ名を添えたインデックスを作成すれば、その値が返されます。つまり、例えば年を取得するには、以下のような擬似的なコードになります。
m=expression.Match("2001-01-20")
year = m["Year"]
これは私が表現でよく使うパターンなので、書き直しが多いのです。
Go regexpでこのような機能を実現する方法はありますか?
どのように解決するのですか?
これらの式はどのように書き直せばよいのでしょうか?
Psを追加してください。 ここで :
(?P<Year>\d{4})-(?P<Month>\d{2})-(?P<Day>\d{2})
キャプチャグループ名を
re.SubexpNames()
.
そして を次のように使用します。 :
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())
}
関連
-
[解決済み】改行を含む任意の文字にマッチする正規表現
-
[解決済み】正規表現における括弧のエスケープについて
-
[解決済み] 正規表現で変数を使うには?
-
[解決済み] 正規表現 - 文字列で始まり、文字列で終わる
-
[解決済み] 正規表現における非捕捉グループとは何ですか?
-
[解決済み] JavaScriptの正規表現でマッチしたグループにアクセスするにはどうすればよいですか?
-
[解決済み] Microsoft Excelで正規表現(Regex)をセル内とループの両方で使用する方法
-
[解決済み] 正規表現における「lazy」「greedy」の意味とは?
-
[解決済み] jQueryセレクタの正規表現
-
[解決済み] a^n b^n に一致させるには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] MACアドレスの正規表現とは何ですか?
-
[解決済み] Regex:最初に出現する文字までのマッチング
-
[解決済み] 正規表現の主題文字列で空白を無視するには?
-
[解決済み] この正規表現に負の小数点を含めるにはどうしたらよいですか?
-
[解決済み] GNU sed の lookahead 正規表現がおかしいのですが?
-
[解決済み] 特定の文字が後にない'単語'を探す
-
[解決済み] what meas this regex (.*1) [duplicate] (重複)
-
[解決済み] 正規表現 AND 演算子
-
[解決済み] 展開された正規表現では、どのように解釈されますか?
-
[解決済み] Regex - 特定の文字が含まれていません。