1 回答

TA貢獻1804條經驗 獲得超3個贊
Perl 和 POSIX 兼容的正則表達式在很大程度上是相似的,但在一些關鍵方面有所不同,例如submatching。這是在這里提到的:
POSIX 定義要解析子匹配,首先選擇字符串中最左邊開始的匹配。(這是傳統的 Perl 行為,但這里的情況有所不同。)在從字符串最左邊位置開始的子匹配中,選擇總體上最長的一個。
假設您有一個正則表達式(foo|foobar)。當將此表達式與匹配多個子表達式的字符串匹配時(例如,foobarbaz匹配兩個子模式foo和foobar),Perl 兼容的正則表達式將返回第一個匹配項( foo),而 POSIX 兼容的正則表達式將返回最長的匹配( foobar).
一些示例代碼(操場):
package main
import "fmt"
import "regexp"
func main() {
pattern := "(foo|foobar)"
str := []byte("foobarbaz")
rPCRE, _ := regexp.Compile(pattern)
rPOSIX, _ := regexp.CompilePOSIX(pattern)
matchesPCRE := rPCRE.Find(str)
fmt.Println(string(matchesPCRE))
// prints "foo"
matchesPOSIX := rPOSIX.Find(str)
fmt.Println(string(matchesPOSIX))
// prints "foobar"
}
- 1 回答
- 0 關注
- 332 瀏覽
添加回答
舉報