[解決済み] Go の "Unknown escape sequence" エラー
2023-05-25 08:20:42
質問
以下のような関数がGoで書かれています。 この関数は、文字列が渡され、最初に見つかったIPv4 IPアドレスを返すというものです。 IPアドレスが見つからない場合、空の文字列が返されます。
func parseIp(checkIpBody string) string {
reg, err := regexp.Compile("[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+")
if err == nil {
return ""
}
return reg.FindString(checkIpBody)
}
コンパイル時に発生するエラーは
不明なエスケープシーケンス: .
どうすれば Go に
'.'
が私が探している実際の文字であることをGoに伝えるにはどうしたらよいでしょうか? エスケープすればうまくいくと思ったのですが、どうやら間違っているようです。
どのように解決するのですか?
この
\
バックスラッシュは正規表現パーサーによって解釈されるのではなく、文字列リテラルによって解釈されます。バックスラッシュを再度エスケープする必要があります。
regexp.Compile("[0-9]+\\.[0-9]+\\.[0-9]+\\.[0-9]+")
で引用された文字列は
"
ダブルクオート文字で引用された文字列は " と呼ばれます。
と解釈されます。
文字列リテラル" として知られています。解釈された文字列リテラルは多くの言語での文字列リテラルと同じです。
\
バックスラッシュ文字は文字通りに含まれるわけではなく、次の文字に特別な意味を持たせるために使われます。ソースには
\\
を2つ並べる必要があります。
Go には、正規表現のための文字列リテラルを書くときに便利な別の選択肢があります: "
raw
文字列リテラル" が引用されます。
`
バックスティック文字で引用されます。生の文字列リテラルには特別な文字はありませんので、パターンにバックスティックが含まれていない限り、何もエスケープせずにこの構文を使用することができます。
regexp.Compile(`[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+`)
関連
-
[解決済み] DartでRegExを使うには?
-
[解決済み] ColdFusion を使用して XML 文字列から余分なホワイトスペースをすべて削除するにはどうすればよいですか?
-
[解決済み] 正規表現の冒頭の感嘆符と末尾のドル記号は何ですか?
-
[解決済み] Bashスクリプトで文字列が正規表現にマッチするかどうかをチェックする
-
[解決済み] Regexの複数マッチの部分文字列
-
[解決済み] 正規表現で任意の文字数を表す記号?
-
[解決済み] 一重引用符で囲まれた文字列の一重引用符をエスケープするには
-
[解決済み] 正規表現で「この文字列までなら何でもあり」にマッチさせるには?
-
[解決済み] String.Formatで%をエスケープするには?
-
[解決済み】Goの構造体のスタックとヒープ割り当て、およびガベージコレクションとの関連性
最新
-
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 実装 サイバーパンク風ボタン