学习了正则表达式,个人感觉正则表达式还是非常重要的!
正则表达式的主要作用还是对字符串的操作:
1.首先来说对字符串的匹配问题:
我们可以构造一个真正表达式如:"[0-9]"这个很显然说是字符为数字!所以来试一下:
//字符串的匹配String类 的matches方法
public static void method_1(){
String regex = "[0-9]";
String str = "a";
String str1 = "0";
boolean flag;
flag = str.matches(regex);//字符串是否匹配该规则!
System.out.println("结果为"+flag);
flag = str1.matches(regex);
System.out.println("结果为"+flag);
}
在这个方法中,我们先构造了一个正则表达式,而且还有一个字符串,所以我们可以利用matches方法来验证知否符合规范!那么到底该如何书写正则表达式呢?
来看一下api中给出的:
1.首先来看一下字符的表示:
x | 字符 x |
\\ | 反斜线字符 |
\0n | 带有八进制值 0 的字符 n (0 <= n <= 7) |
\0nn | 带有八进制值 0 的字符 nn (0 <= n <= 7) |
\0mnn | 带有八进制值 0 的字符 mnn(0 <= m <= 3、0 <= n <= 7) |
\xhh | 带有十六进制值 0x 的字符 hh |
\uhhhh | 带有十六进制值 0x 的字符 hhhh |
\t | 制表符 ('\u0009') |
\n | 新行(换行)符 ('\u000A') |
\r | 回车符 ('\u000D') |
\f | 换页符 ('\u000C') |
\a | 报警 (bell) 符 ('\u0007') |
\e | 转义符 ('\u001B') |
\cx | 对应于 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 次 |
//字符串的切割用到了split方法!
public static void method_2()
{
String regex = "(.)\\1";//叠词的切割方法,用到了组的概念!
String str = "stccusshiic";
String[] strings;
strings = str.split(regex);//字符串是否匹配该规则!
for(String s : strings)
{
System.out.println(s);
}
}
以上给出了一个字符串切割的方法!涉及到了组的概念,在正则中要用到之前的匹配的东西,可以用组来实现!用()来实现,以后的覆用通过\1或者\n(表组号)来实现!
所以我们来看一下((())())一共有4个组分别是依照他们的左括号类区分的!
下面我们再来一个例子,看一下切割空格是如何进行的!
public static void method_3()
{
String regex = " +";//匹配多个空格
String str = "st uss iic";
String[] strings;
strings = str.split(regex);//字符串是否匹配该规则!
for(String s : strings)
{
System.out.println(s);
}
}
3.字符串的替代:String的replaceAll
我们先写代码:
public static void method_4()
{
String regex = "(.)\\1";//匹配的叠词并去掉
String str = "stqqfdeetedggeriic";
String s;
s = str.replaceAll(regex, "$1");//字符串匹配该规则的替换掉
System.out.println(s);
}
看到的是用到了$1这个的意思就是当你的组使用后,可以在其他正则中使用$n来表示是第几组的匹配!
其实在API中典型的调用是这样的:
Pattern p = Pattern.而他可以简单地写成compile
("a*b"); Matcher m = p.matcher
("aaaaab"); boolean b = m.matches
();
boolean b = Pattern.matches("a*b", "aaaaab");我们可以看出,String中的对正则的应用是调用了Pattern和Matcher来实现的!