亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Go 中字符串末尾的正則表達式匹配失敗

Go 中字符串末尾的正則表達式匹配失敗

Go
尚方寶劍之說 2023-07-17 14:40:58
我正在嘗試針對以下模式測試一個字符串:“至少一對方括號,包含 2 位數字,后跟至少一個字符”。例如,[11][22][33]dd應該匹配而不應該匹配[11][22][33]。我已經嘗試過這個正則表達式:(\[\d{2}])+.+. 然而,當它與 進行測試時[11][22][33],它應該會失敗,但它仍然通過了該測試。第一個+量詞僅匹配兩組[11]和[22],其余部分[33]匹配.+。我認為量詞的“貪婪”行為+會耗盡它所修改的組的所有匹配段;然而,正則表達式引擎似乎會將“耗盡所有匹配可能性”原則置于“貪婪量詞”規則之上,而不是我所期望的方式。我應該如何實現我的目標?(這個問題實際上與語言無關,盡管標有“golang”,這是我當前使用的語言。)
查看完整描述

2 回答

?
慕標琳琳

TA貢獻1830條經驗 獲得超9個贊

您可以使用


re := regexp.MustCompile(`(?:\[\d{2}])+(.*)`)

match := re.FindStringSubmatch(s)

if len(match) > 1 {

    return match[1] != ""

}

return false

該(?:\[\d{2}])+(.*)模式匹配 1+ 次出現[,2 個數字,]然后將除換行符之外的任何 0 個或更多字符捕獲到組 1 中。然后,如果找到匹配項 ( if len(match) > 1),true則如果組 1 值不為空,則應返回 ( match[1] != ""),否則false返回。


請參閱Go 演示


package main


import (

    "fmt"

    "regexp"

)


func main() {

    strs := []string{

        "[11][22][33]",

        "___[11][22][33]",

        "[11][22][33]____",

        "[11][22]____[33]",

    }

    for _, str := range strs {

        fmt.Printf("%q - %t\n", str, match(str))

    }

}


var re = regexp.MustCompile(`(?:\[\d{2}])+(.*)`)


func match(s string) bool {

    match := re.FindStringSubmatch(s)

    if len(match) > 1 {

        return match[1] != ""

    }

    return false

}

輸出:


"[11][22][33]" - false

"___[11][22][33]" - false

"[11][22][33]____" - true

"[11][22]____[33]" - true


查看完整回答
反對 回復 2023-07-17
?
白衣非少年

TA貢獻1155條經驗 獲得超0個贊

我認為您需要使用的正則表達式是這樣的:

(\[[0-9]{2}\]){1,}[a-z]{1,}


查看完整回答
反對 回復 2023-07-17
  • 2 回答
  • 0 關注
  • 166 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號