import java.util.regex._
object RegMatcher extends App {
val str="facebook.com"
val urlpattern="(http://|https://|file://|ftp://)?(www.)?([a-zA-Z0-9]+).[a-zA-Z0-9]*.[a-z]{3}.?([a-z]+)?"
var regex_list: Set[(String, String)] = Set()
val url=Pattern.compile(urlpattern)
var m=url.matcher(str)
if (m.find()) {
regex_list += (("date", m.group(0)))
println("match: " + m.group(0))
}
val str2="url is ftp://filezilla.com"
m=url.matcher(str2)
if (m.find()) {
regex_list += (("date", m.group(0)))
println("str 2 match: " + m.group(0))
}
}
这返回
match: facebook.com
str 2 match: url is ftp:
如何管理正则表达式模式,以便两个字符串匹配良好。 这些符号在正则表达式中的实际含义是什么。我对正则表达式很陌生。请帮忙。
我把你的正则表达式读作:
- 0或1(
?
修饰符(的方案(http://
,https://
等( - 后跟 0 或 1 个
www.
实例, - 后跟 1 个或多个(
+
修饰符(字母数字字符, - 后跟任何字符(
.
是正则表达式特殊字符,请记住,代表任何一个字符(, - 后跟 0 或更多(
*
修饰符(字母数字, - 后跟任何字符(再次
.
( - 后跟 3 个小写字母(
{3}
是精确计数修饰符( - 后跟任意字符的 0 或 1 (
.?
( - 后跟一个或多个低写字母。
如果你将正则表达式插入 regex101.com,你不仅会看到类似的故障(我没有犯任何错误,尽管我认为我搞定了(,而且你还有机会测试各种字符串。 然后,一旦您的正则表达式按照您想要的方式工作,您就可以将它们带回您的脚本。 这是一个可靠的工作流程,用于学习正则表达式和为特定目的开发表达式。
如果你把你的正则表达式和你的输入放到正则表达式 101 中,你就会明白为什么你会得到你看到的输出。 但这里有一个提示:当你要求你的正则表达式匹配"url is ftp://filezilla.com"
时,没有什么能排除"url is"
成为匹配的一部分。 这就是为什么你没有匹配你想要的方案。 Regex101确实是进一步研究这个问题的好方法。
正则表达式可以更新为
((ftp|https|http?)://(?:www.|(?!www))[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9].[^s]{2,}|www.[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9].[^s]{2,})
这就是我所需要的。