如何从regex电子邮件模式中排除图像?
我正在使用这个正则表达式:如何从regex电子邮件模式中排除图像?,regex,go,Regex,Go,我正在使用这个正则表达式:\b[A-Za-z0-9.\uz%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b,我是从中找到的 但是,它会产生图像,如175x100@3x.jpg将被视为电子邮件 我做了一些搜索,发现我可以利用负前瞻,但GoLang regexp包不提供此功能。是否有其他可供我使用的正则表达式模式?您可以匹配希望忽略的任何扩展,然后匹配并捕获TLD模式。如果组1值不为空,则获取匹配项,否则放弃: package main import ( "fmt
\b[A-Za-z0-9.\uz%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b
,我是从中找到的
但是,它会产生图像,如175x100@3x.jpg将被视为电子邮件
我做了一些搜索,发现我可以利用负前瞻,但GoLang regexp包不提供此功能。是否有其他可供我使用的正则表达式模式?您可以匹配希望忽略的任何扩展,然后匹配并捕获TLD模式。如果组1值不为空,则获取匹配项,否则放弃:
package main
import (
"fmt"
"regexp"
)
func main() {
s := ` 175x100@3x.jpg and 175x100@3x.com`
rex := regexp.MustCompile(`\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.(?:jpe?g|([A-Za-z]{2,6}))\b`)
results := rex.FindAllStringSubmatch(s, -1)
for _, match := range results {
if len(match[1]) > 0 {
fmt.Printf("%q\n", match[0])
}
}
}
看。输出:175x100@3x.com
这里,
(?:jpe?g|([A-Za-z]{2,6}))
模式匹配jpg
或jpeg
,并匹配并捕获到组1中的任意两到六个ASCII字母if len(match[1])>0{fmt.Printf(“%q\n”,match[0])}
part仅在组1匹配时打印匹配。关于175x100@3x.jpg
?因为它以\d+x\d+@
开头,或者因为它以.jpg
结尾?你尝试过什么负面展望?当然,它在Go正则表达式中不起作用,但它可能会让你明白你到底想做什么,因为它以.jpg
结尾。如果是175x175@email.com
那我就没问题了。所以,有两种方法。或者检查以.jpg
结尾的所有匹配项,如果匹配,则丢弃它们。或者使用带有替换项的正则表达式,如\b(?[a-Za-z0-9.[uz%+-]+@[a-Za-z0-9.-]+\.jpe?g |([a-Za-z0-9.[u%+-]+@[a-Za-z0-9.-+\[a-Za-z]{2,6}))\b
并只收集存在的第1组值。这是有效的电子邮件。您还有一个问题..jpg在语法上是一个有效的域扩展。有朝一日,它可能会成为一个可注册的。