正则表达式规则:
A:字符
x 字符 x。举例:'a'表示字符a
\\ 反斜线字符。
\n 新行(换行)符 ('\u000A')
\r 回车符 ('\u000D')
B:字符类
[abc] a、b 或 c(简单类)
[^abc] 任何字符,除了 a、b 或 c(否定)
[a-zA-Z] a到 z 或 A到 Z,两头的字母包括在内(范围)
[0-9] 0到9的字符都包括
C:预定义字符类
. 任何字符。我的就是.字符本身,怎么表示呢? \.或者[.]或者\56
\d 数字:[0-9]
\D 非数字
\s 代表空格字符
\S 代表非空格字符
\w 单词字符:[a-zA-Z_0-9](代表标识符字符除了美元符号)
在正则表达式里面组成单词的东西必须有这些东西组成
\W 不能代表标识符的字符
D:边界匹配器
^ 行的开头
$ 行的结尾
\b 单词边界
就是不是单词字符的地方。
举例:hello world?haha;xixi
E:Greedy 数量词
X? X出现0次或1次
X* X出现零次或多次
X+ X出现一次或多次
X{n} X出现恰好 n 次
X{n,} X出现至少 n 次
X{n,m} X出现至少 n 次,但是不超过 m 次
(六)判断功能
String类的public boolean matches(String regex)
例子:
判断手机号码是否满足要求?
代码如下:
Scanner reader=new Scanner(System.in);
String s=reader.nextLine();
boolean flag=s.matches("[1][38]\\d{9}");
System.out.println(flag);
(1)校验邮箱
分析:
A:键盘录入邮箱
B:定义邮箱的规则
1517806580@qq.com
liuyi@163.com
linqingxia@126.com
fengqingyang@sina.com.cn
fqy@itcast.cn
C:调用功能,判断即可
D:输出结果
代码实现:
//定义邮箱的规则
String regex = "\\w+@\\w{2,6}(\\.\\w{2,3})+";
//调用功能,判断即可
boolean flag = email.matches(regex);
//输出结果
System.out.println("flag:"+flag);
(2)分割功能练习
代码实现:
public class RegexDemo2 {
public static void main(String[] args) {
// 定义一个字符串
String s1 = "aa,bb,cc";
// 直接分割
String[] str1Array = s1.split(",");
for (int x = 0; x < str1Array.length; x++) {
System.out.println(str1Array[x]);
}
System.out.println("---------------------");
String s2 = "aa.bb.cc";
String[] str2Array = s2.split("\\.");
for (int x = 0; x < str2Array.length; x++) {
System.out.println(str2Array[x]);
}
System.out.println("---------------------");
String s3 = "aa bb cc";
String[] str3Array = s3.split(" +");
for (int x = 0; x < str3Array.length; x++) {
System.out.println(str3Array[x]);
}
System.out.println("---------------------");
//硬盘上的路径,我们应该用\\替代\
String s4 = "E:\\JavaSE\\day14\\avi";
String[] str4Array = s4.split("\\\\");
for (int x = 0; x < str4Array.length; x++) {
System.out.println(str4Array[x]);
}
System.out.println("---------------------");
}
}
(3)我有如下一个字符串:"91 27 46 38 50"
请写代码实现最终输出结果是:"27 38 46 50 91"
分析:
A:定义一个字符串
B:把字符串进行分割,得到一个字符串数组
C:把字符串数组变换成int数组
D:对int数组排序
E:把排序后的int数组在组装成一个字符串
F:输出字符串
代码实现:
public class RegexDemo6 {
public static void main(String[] args) {
String s="91 27 46 38 50";
String [] ss=s.split(" ");
Integer[] ii=new Integer[ss.length];
for(int i=0;i<ss.length;i++)
ii=Integer.valueOf(ss);
Arrays.sort(ii);
StringBuffer sb=new StringBuffer();
sb.append("\"");
for(int i=0;i<ii.length;i++){
if(i==ii.length-1)
sb.append(ii);
else
sb.append(ii).append(" ");
}
sb.append("\"");
System.out.println(sb.toString());
}
}
(4) 替换功能
String类的public String replaceAll(String regex,String replacement)
使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串。
代码实现:
public class RegexDemo7 {
public static void main(String[] args) {
// 定义一个字符串
String s = "helloqq12345worldkh622112345678java";
// 我要去除所有的数字,用给替换掉
String ss=s.replaceAll("\\d+", "");
System.out.println(ss);
}
}
(5)获取功能:
获取下面这个字符串中由三个字符组成的单词
da jia ting wo shuo,jin tian yao xia yu,bu shang wan zi xi,gao xing bu?
代码实现:
public class RegexDemo8 {
public static void main(String[] args) {
String s="da jia ting wo shuo,jin tian yao xia yu,bu shang wan zi xi,gao xing bu";
String regex="\\b\\w{3}\\b";
Matcher m=Pattern.compile(regex).matcher(s);
while(m.find())
System.out.println(m.group());
}
} |
|