黑马程序员---------------JAVA基础--------正则表达式

来源:互联网 发布:mac上如何装office 编辑:程序博客网 时间:2024/06/07 19:35

------- android培训、java培训、期待与您交流! ----------

正则表达式:专门用于操作字符串。

正则表达式的操作:1 匹配

public class RegexText {public static void main(String[] args){//对qq号码进行校验 要求 5-15位,0不能开头,只能数字。String str = "54642345";String regex = "[1-9][0-9]{4,14}";System.out.println(str.matches(regex));if(str.matches(regex))System.out.println("匹配成功!");elseSystem.out.println("qq 号不匹配!");}}true匹配成功!String str = "546a2345";falseqq 号不匹配!
String类有matches(String regex)方法,可以用来匹配字符串是否匹配要求。

正则表达式的构造概要:

x 字符 x
\\ [abc] a、b 或 c(简单类)
[^abc] 任何字符,除了 a、b 或 c(否定)
[a-zA-Z] a 到 z 或 A 到 Z,两头的字母包括在内(范围)
[a-d[m-p]] a 到 d 或 m 到 p:[a-dm-p](并集)
[a-z&&[def]] d、e 或 f(交集)
[a-z&&[^bc]] a 到 z,除了 b 和 c:[ad-z](减去)
[a-z&&[^m-p]] a 到 z,而非 m 到 p:[a-lq-z](减去).


. 任何字符(与行结束符可能匹配也可能不匹配)
\d 数字:[0-9]
\D 非数字: [^0-9]
\s 空白字符:[ \t\n\x0B\f\r]
\S 非空白字符:[^\s]
\w 单词字符:[a-zA-Z_0-9]
\W 非单词字符:[^\w]

^ 行的开头
$ 行的结尾

X? X,一次或一次也没有
X* X,零次或多次
X+ X,一次或多次
X{n} X,恰好 n 次
X{n,} X,至少 n 次
X{n,m} X,至少 n 次,但是不超过 m 次


\n 任何匹配的 第n 捕获组

捕获组可以通过从左到右计算其开括号来编号。例如,在表达式 ((A)(B(C))) 中,存在四个这样的组:

1 ((A)(B(C)))
2 \A
3 (B(C))
4 (C)

组零始终代表整个表达式。

//因此String regex = "[1-9][0-9]{4,14}"; 为第一个为1-9的数字,第二位为0-9的数字且出现了4到14次。
操作二: 切割
String[]  split(String regex);// <span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">根据给定正则表达式的匹配拆分此字符串。</span>

想要按照叠词切割单词:

public class RegexText {public static void main(String[] args){String str ="fdddgfdffsdsaaes";String regex = "(.)\\1+";  // .表示任意字符,括起来就是第一组,+ 是依次或多次,就是说前面第一组匹配的又出现了一次或多次,即叠词。String[] arrs =str.split(regex);for(String arr : arrs){System.out.println(arr);}}}输出:fgfdsdses
这也看出了正则表达式的一个弊端:符号越长,正则越多,越难阅读。

第三种操作: 替换

String replaceAll(String regex, String replacement)   //使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串。


将字符串的叠词换成单个字母:

public static void main(String[] args){String str ="asssdffgghhdeefss";String regex = "(.)\\1+";System.out.println(str.replaceAll(regex, "$1"));  // $1 表示第一组捕获到的内容,即用捕获到的字母替换叠词。}输出:asdfghdefs


第四种操作: 获取

操作步骤:

1 将正则表达式封装成对象(compile);

2 将正则对象和要操作的字符串相关联;

3 关联后,获得匹配引擎(Mather)

4 通过引擎对符合规则的子串进行取出。

Pattern类和Matcher类:

Pattern:

static Pattern compile(String regex)   将给定的正则表达式编译到模式中。

Matcher matcher(CharSequence input) 创建匹配给定输入与此模式的匹配器。

Matcher:

boolean matches()  尝试将整个区域与模式匹配。

boolean find()  尝试查找与该模式匹配的输入序列的下一个子序列。 

String group(int group)    返回在以前匹配操作期间由给定组捕获的输入子序列。

....

import java.util.regex.*;public class RegexText {public static void main(String[] args){String str = "ming tian jiu yao fang jia le";String regex = "\\b[a-z]{4}\\b";//将规则封装成对象Pattern pattern = Pattern.compile(regex);//正则对象和要作用的字符串相关联。获取匹配器Matcher matcher = pattern.matcher(str);while(matcher.find())System.out.println(matcher.group());}}输出:mingtianfang
联系 对邮件地址进行匹配:

String regex = "[a-zA-Z0-9_]+@[a-zA-Z0-9]+(\\.[a-zA-Z]){1,3}";








0 0