首页 新闻 搜索 专区 学院

运用正则表达式

0
[待解决问题]

小明最近在学习MVC编程,为了学习方便,他计划申请一个自己的域名。他拟定了一组域名,但是他对域名规则不同熟悉,所以他想请你帮忙判断一下他拟定的域名是否合规。恰好你刚刚学习了正则表达式,你知道使用正则表达式可以很容易的完成这项任务。 域名通常由顶级域名和二级、三级域名组成,最后面的是顶级域名,向左依次是二级域名、三级域名。顶级域名分国际和国内顶级域名,顶级域名只有有限的几种,用来表示域名所属的类型或国家。二级、三级域名则可以由用户自己拟定,只要满足相关的命名规则就可以了。英文二级和三级域名的命名规则是: 1、必须由字母(a~z,A~Z)、数字(0~9)、连接符(-)组成,字母不区分大小写。 2、长度不超过20。 3、不以连接符(-)开头和结尾。 比如: google.com是个合法的二级域名,com是顶级域名,google是二级域名 sm.gov.cn是个合法的三级域名,cn是个顶级域名,gov是二级域名,sm是三级域名。而sm_0598.com,-sm.com.cn,sm-.gov.cn则不是一个合法的域名。

import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main{
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner cin=new Scanner(System.in);
while(cin.hasNext()){
String s=cin.next();
if(s.length()>20){
break;
}
String pat1="^(?!-)[a-zA-Z0-9-]+\\.[a-z]+";
String pat2="^(?!-)[a-zA-Z0-9-]+\\.[a-zA-Z0-9-]+\\.[a-z]+";
Pattern p=Pattern.compile(pat1);
Pattern p1=Pattern.compile(pat2);
Matcher m=p.matcher(s);
Matcher m1=p1.matcher(s);
if(m.matches()){
System.out.print("合法的二级域名:");
String c[]=s.split("\\.");

for(int x=c.length-1;x>0;x--){
String s2[]=c[x].split("\\.");
System.out.print(s2[0]+" ");
}

for(int x=0;x<c.length-1;x++){
String s2[]=c[x].split("\\.");
System.out.print(s2[0]+" ");
}

}

else if(m1.matches()){
System.out.print("合法的三级域名:");
String c1[]=s.split("\\.");
for(int x=c1.length-1;x>=0;x--){
String s2[]=c1[x].split("\\.");
System.out.print(s2[0]+" ");
}
}else{
System.out.println("非法域名");
continue;
}
System.out.println();
}

}

}

 这是我写的,不懂怎么修改

天道酬勤,为家为自己的主页 天道酬勤,为家为自己 | 菜鸟二级 | 园豆:202
提问于:2017-04-15 09:33
< >
分享
所有回答(1)
0

String pattern="^([a-zA-Z0-9]([a-zA-Z0-9-])*[a-zA-Z0-9]\\.){1,2}[a-z]+$"; 

这一条是正则匹配你说的三条规则(长度小于20除外)

Pattern pattern = Pattern.compile("^([a-zA-Z0-9]([a-zA-Z0-9-])*[a-zA-Z0-9]\\.){1,2}[a-z]+$");

Scanner cin = new Scanner(System.in);
while (cin.hasNext()) {
String s = cin.next();
if (s.length() > 20) {
break;
}

Matcher matcher = pattern.matcher(s);
if(matcher.matches()){
System.out.print("合法");
}else{
System.out.print("不合法");
}
}
}

 

输出结果:

sdfasdf
不合法
www.baidu.com
合法
google.com
合法
-google.z
不合法
www-.baidu.com
不合法

牧师/preacher | 园豆:500 (菜鸟二级) | 2017-04-18 14:07
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册