首頁 >後端開發 >Golang >Go Regexp 的「.」是否符合換行符號?任何字元匹配的意外行為。

Go Regexp 的「.」是否符合換行符號?任何字元匹配的意外行為。

DDD
DDD原創
2024-10-28 11:03:01648瀏覽

 Does Go Regexp's

Go Regexp:理解任意字符匹配

Go re2 語法文檔指出任意字符(.) 匹配任意字符,包括換行符當“ s”標誌被設定時。然而,最近的查詢引起了擔憂,因為測試程序似乎表明情況並非如此。

程式結果意外

提供的程式(http://play.golang.org /p/pccP52RvKS) 旨在匹配所有字符,包括換行符,但其結果顯示任何字元都不符合換行符。

解決差異

與許多其他字元一樣正規表示式引擎,Go 的 re2 不符合帶有「.」的換行符。預設為元字元。若要啟用換行符匹配,必須將“?s”(點全)標誌新增至正規表示式。

有「?s」標誌的範例

修改版本包含「?s」標誌的測試程式的範例:

<code class="go">package main

import (
    "fmt"
    "regexp"
)

func main() {
    re := regexp.MustCompile("(?s).+")
    match := re.FindString("abc\ndef")
    fmt.Println(match)
}</code>

執行時,程式正確列印“abcndef”,表示任何字元現在都按預期匹配換行符。

結論

Go 的 re2 語法中,「.」元字元本質上並不符合換行符。若要啟用換行符匹配,必須將“?s”標誌新增至正規表示式。透過合併此標誌,使用者可以確保與 re2 語法文件保持一致的準確匹配行為。

以上是Go Regexp 的「.」是否符合換行符號?任何字元匹配的意外行為。的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn