不同語言中的正規表示式行為:Go 與Python
當嘗試在Go 中使用正規表示式時,開發人員可能表示會遇到意外行為。例如,考慮以下程式碼:
package main import ( "fmt" "regexp" ) func main() { a := "parameter=0xFF" regex := "^.+=\b0x[A-F][A-F]\b$" result, err := regexp.MatchString(regex, a) fmt.Println(result, err) // Prints: false <nil> }
儘管在Python 中正常運作,但此程式碼無法符合預期的輸入字串:
import re p = re.compile(r"^.+=\b0x[A-F][A-F]\b$") m = p.match("parameter=0xFF") if m is not None: print(m.group()) # Prints: parameter=0xFF
這種差異的根本原因在於Go和Python 中字串文字之間的差異。在 Go 中,預設情況下字串文字被視為“熟的”,這意味著它們被解釋為特殊字符,例如轉義序列。然而,對於正規表示式,這種行為是有問題的。
為了解決這個問題,Go 提供了原始字串文字。原始字串文字用反引號(`) 而不是引號(") 括起來。它們會忽略任何特殊字元或轉義序列,確保文字完全按照書面形式進行解釋。
因此,要解決此問題,請使用在Go在程式碼中,正規表示式應指定為原始字串文字:
var regex = `^.+=\b0x[A-F][A-F]\b$`
透過此修改,程式碼現在將正確匹配輸入字串並產生所需的結果。
以上是為什麼 Go 和 Python 正規表示式會產生不同的結果?的詳細內容。更多資訊請關注PHP中文網其他相關文章!