加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

正则表达式

发布时间:2020-12-13 23:07:31 所属栏目:百科 来源:网络整理
导读:正则表达式中的三种字符在字符串中的表示: 1.普通字符 跟普通字符串中无异 2.特殊字符 * ? | () [] {} a 表示本来的含义 在字符串中要写成”?” 注意是两个转义符, 第一个转义是在字符串中表示一个反斜杠 ,然后这个反斜杠和特殊字符一起表示正则表达式

正则表达式中的三种字符在字符串中的表示:

1.普通字符 跟普通字符串中无异

2.特殊字符 * ? | () [] {}

a 表示本来的含义 在字符串中要写成”?” 注意是两个转义符, 第一个转义是在字符串中表示一个反斜杠 ,然后这个反斜杠和特殊字符一起表示正则表达式中它的本来含义

b 表示特殊含义 直接写就行

3.预定义字符(不包括. . 可以看作特殊字符) d w s 写法与特殊字符一样 “d”

其实本质上来说使用字符串来表示正则表达式需要经过两步,第一步就是先把字符串转换为内存中保存的真正形式,例如”*d”

保存到内存中就成为 *d 然后再按照正则表达式的规则 * 是特殊字符,所以* 就用来表示其本来含义,d 就表示一个预定义字符。

汉字的Unicode编码的范围时u4e00-u9fa5

下面是通过Scanner类和直接使用Pattern和Matcher类两种方式取出一个字符串中所有和正则表达式匹配的子串

1.直接Pattern和Matcher

Pattern pattern = Pattern.compile("[u4e00-u9fa5]+");
Matcher matcher = pattern.matcher("welcome你好hello我不好thank你");
while(matcher.find())
{
	System.out.println(matcher.group());
}


2.使用Scanner类的findInLine方法

String str = "[u4e00-u9fa5]+";
Scanner scanner = new Scanner("welcome你好hello我不好thank你");
String result = null;
while((result = scanner.findInLine(str)) != null)
{
	System.out.println(result);
}


下面的例子有点意思

String regStr = "((w+) (w+)) ((w+) (w+))";
		String resource = "java is very easy";
		Scanner scanner = new Scanner(resource);
		scanner.findInLine(regStr);
		MatchResult result = scanner.match();
System.out.println(result.group() == result.group(0));
		for(int i = 0; i <= result.groupCount(); i++)
		{
			//System.out.println(result.group(i));
		}
		/*
		 上面的结果是
		 group(0) 总是指向整体 
捕获组是从左到右的索引,从 1 开始。组零表示整个模式,因此表达式 m.group(0) 等效于 m.group()。 
		 java is very easy
		 java is
		 java
		 is
         	 	very easy
         		very
         	             easy
		 */

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读