我正在制定一个正则表达式,用于验证包含以下格式条目的文本区域,
an url, boolean(true or false), string(with or without spaces)
一个例子如下,
http://www.yahoo.com, true, web mail site
http://www.google.com, false, a search site
所以我试图为每一行制定一个正则表达式,如下所示,
(^(http|https|ftp)\://[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(:[a-zA-Z0-9]*)?/?([a-zA-Z0-9\-\._\?\,\'/\\\+&%\$#\=~])*$)(,(true|false))(,(.*))
因此我可以检查每一行,但这个正则表达式不起作用。整个正则表达式无法匹配逗号分隔字符串的类型。还有一些方法可以让这个正则表达式检查多行并验证这种模式吗?
答案 0 :(得分:1)
如果换行是您唯一的问题,您可以使用Pattern.MULTILINE
标记:
Pattern.compile("^((?:https?|ftp|file)://[-A-Z0-9+&@#/%?=~_|$!:,.;]*[A-Z0-9+&@#/%=~_|$]), (true|false), (.*)$", Pattern.MULTILINE|Pattern.CASE_INSENSITIVE);
您还可以嵌入flag(s):
Pattern.compile("(?mi)^((?:https?|ftp|file)://[-A-Z0-9+&@#/%?=~_|$!:,.;]*[A-Z0-9+&@#/%=~_|$]), (true|false), (.*)$",);
我冒昧地为你的网址使用不同的正则表达式(它来自Regex Buddy)。这也将把所有东西都放在一个捕获组中。
public static void extract(String str) {
Pattern regex = Pattern.compile("(?mi)^((?:https?|ftp|file)://[-A-Z0-9+&@#/%?=~_|$!:,.;]*[A-Z0-9+&@#/%=~_|$]), (true|false), (.*)$");
Matcher m = regex.matcher(str);
while (m.find()) {
System.out.println("URL: " + m.group(1));
System.out.println("Bool: " + m.group(2));
System.out.println("Text: " + m.group(3) + "\n");
}
}
public static void main (String[] args) throws java.lang.Exception
{
String str = "http://www.yahoo.com, true, web mail site\nhttp://www.google.com, false, a search site";
extract(str);
}
输出:
URL: http://www.yahoo.com
Bool: true
Text: web mail site
URL: http://www.google.com
Bool: false
Text: a search site