java_正则表达式

学习了正则表达式,个人感觉正则表达式还是非常重要的!

正则表达式的主要作用还是对字符串的操作:

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 的控制符
2.再来看一下字符类:

[abc]abc(简单类)
[^abc]任何字符,除了 abc(否定)
[a-zA-Z]azAZ,两头的字母包括在内(范围)
[a-d[m-p]]admp[a-dm-p](并集)
[a-z&&[def]]def(交集)
[a-z&&[^bc]]az,除了 bc[ad-z](减去)
[a-z&&[^m-p]]az,而非 mp[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]
在这里我们可以用这些来表示!经常用的就是这些比如:.还有\d.有一点要注意,在java中必须用\\d来表示,原因?你懂得!

还要注意如果字符串是很长怎么办?所以有必要学习数量词

X?X,一次或一次也没有
X*X,零次或多次
X+X,一次或多次
X{n}X,恰好 n
X{n,}X,至少 n
X{n,m}X,至少 n 次,但是不超过 m
2.就是对字符串的切割了用到的是String的split方法!

	//字符串的切割用到了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来实现的!





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值