Files
bulma/regexp/regexp_demo_12.go
T

43 lines
1.5 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package main
import (
"fmt"
"regexp"
)
func main() {
// 场景1:Longest 长短匹配对比(最核心模式切换)
fmt.Println("===== 1. Longest最长匹配 vs 默认first匹配 =====")
expr := `(a+)|(aaa)`
// 默认 leftmost-first
reDefault := regexp.MustCompile(expr)
fmt.Println("默认模式匹配aaaa", reDefault.FindString("aaaa")) // 优先第一个分支a+,短匹配
// 开启最长匹配
reLong := regexp.MustCompile(expr)
reLong.Longest()
fmt.Println("Longest最长模式匹配aaaa", reLong.FindString("aaaa"))
// 场景2. 匹配换行 RE2专属 (?s:.)
fmt.Println("\n===== 2. 点号匹配换行符 =====")
strWithLine := "hello\nworld"
// 普通. 不跨换行
reDotNormal := regexp.MustCompile(`hello.world`)
fmt.Println("普通.匹配换行:", reDotNormal.MatchString(strWithLine))
// (?s:.) 让.识别换行
reDotAll := regexp.MustCompile(`(?s:hello.world)`)
fmt.Println("(?s:.)开启跨行匹配:", reDotAll.MatchString(strWithLine))
// 场景3:大小写不敏感匹配(无修饰符,字符组兼容大小写)
fmt.Println("\n===== 3. 大小写忽略匹配方案 =====")
target := "Apple APPLE apple aPpLe"
// 写法1:字符组罗列大小写
reCase := regexp.MustCompile(`[Aa][Pp][Pp][Ll][Ee]`)
fmt.Println("大小写全部匹配结果:", reCase.FindAllString(target, -1))
// 场景4CompilePOSIX 天生Longest语义
fmt.Println("\n===== 4. CompilePOSIX 原生最长匹配 =====")
rePosix, _ := regexp.CompilePOSIX(expr)
fmt.Println("CompilePOSIX匹配aaaa", rePosix.FindString("aaaa"))
}