Golang Regexp.Find
最后修改于 2025 年 4 月 20 日
本教程解释了如何在 Go 中使用 Regexp.Find 方法。我们将介绍基本的模式匹配并提供实际示例。
一个 正则表达式 是一个定义搜索模式的字符序列。它用于在字符串中进行模式匹配。
Regexp.Find 方法返回一个切片,其中包含字节切片中最左边匹配项的文本。如果未找到匹配项,则返回 nil。
基本的 Regexp.Find 示例
Regexp.Find 最简单的用法是在字节切片中查找第一个匹配项。在这里,我们搜索一个简单的单词模式。
package main
import (
"fmt"
"regexp"
)
func main() {
re := regexp.MustCompile(`foo`)
text := []byte("some foo bar foo baz")
match := re.Find(text)
fmt.Printf("Found: %q\n", match) // "foo"
}
该方法返回字节切片中“foo”的第一个出现。结果是一个包含匹配文本的字节切片。
在字符串中查找数字
此示例演示了在字符串中查找第一个数字序列。我们将字符串转换为字节切片进行搜索。
package main
import (
"fmt"
"regexp"
)
func main() {
re := regexp.MustCompile(`\d+`)
text := []byte("Order 12345 was placed on 2025-04-20")
match := re.Find(text)
if match != nil {
fmt.Printf("First number found: %s\n", match) // "12345"
} else {
fmt.Println("No numbers found")
}
}
模式 \d+ 匹配一个或多个数字。该方法返回在输入中找到的第一个数字序列。
不区分大小写的匹配
此示例展示了如何使用 Find 执行不区分大小写的匹配。我们在模式中使用 (?i) 标志修饰符。
package main
import (
"fmt"
"regexp"
)
func main() {
re := regexp.MustCompile(`(?i)hello`)
text := []byte("HeLLo World, hElLo Go")
match := re.Find(text)
fmt.Printf("Found: %q\n", match) // "HeLLo"
}
(?i) 使模式不区分大小写。该方法返回第一个匹配项,忽略大小写。
查找单词边界
此示例演示了使用单词边界查找整个单词。\b 元字符匹配单词边界。
package main
import (
"fmt"
"regexp"
)
func main() {
re := regexp.MustCompile(`\bGo\b`)
text := []byte("Golang Go programming in Go")
match := re.Find(text)
fmt.Printf("Found: %q\n", match) // "Go"
}
该模式仅在“Go”作为整个单词出现时才匹配。它不会匹配“Golang”中的“Go”。
查找 HTML 标签
此示例展示了如何在文档中查找 HTML 标签。我们使用一个简单的模式来匹配标签名称。
package main
import (
"fmt"
"regexp"
)
func main() {
re := regexp.MustCompile(`<[a-zA-Z]+>`)
text := []byte("<html><head><title>Page</title></head>")
match := re.Find(text)
fmt.Printf("First tag found: %s\n", match) // "<html>"
}
该模式匹配打开的 HTML 标签。请注意,这是一个简化的示例,不能处理所有 HTML 标签情况。
查找电子邮件地址
此示例演示了在文本中查找电子邮件地址。我们使用基本的电子邮件模式进行演示。
package main
import (
"fmt"
"regexp"
)
func main() {
re := regexp.MustCompile(`[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}`)
text := []byte("Contact us at info@example.com or support@domain.org")
match := re.Find(text)
fmt.Printf("First email found: %s\n", match) // "info@example.com"
}
该模式匹配常见的电子邮件格式。该方法返回在文本中找到的第一个电子邮件地址。
查找 URL
此示例展示了如何在文本中查找 URL。我们使用一个简单的模式来匹配常见的 URL 格式。
package main
import (
"fmt"
"regexp"
)
func main() {
re := regexp.MustCompile(`https?://[^\s]+`)
text := []byte("Visit https://example.com or http://test.org for more info")
match := re.Find(text)
fmt.Printf("First URL found: %s\n", match) // "https://example.com"
}
该模式匹配以 http:// 或 https:// 开头的 URL。该方法返回在输入文本中找到的第一个 URL。
来源
本教程通过字节切片中的模式匹配实际示例,介绍了 Go 中的 Regexp.Find 方法。