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

正则表达式

发布时间:2020-12-13 19:50:31 所属栏目:百科 来源:网络整理
导读:正则表达式主要用于对字符串的处理, 主要 用于字符串的匹配,分割,替换 规则:(我自己总结的) 1:按照括号 ()表示分组,( . )1 意思 是第二个字符与第一个字符一致 [ ] 表示可选, [134] 意思 1 ,3 ,4中任意一个 [a-z] 意思是a,b....z中的任意一个

正则表达式主要用于对字符串的处理,主要用于字符串的匹配,分割,替换

规则:(我自己总结的)

1:按照括号

()表示分组,(.)1意思是第二个字符与第一个字符一致

[ ] 表示可选,[134]意思1,3,4中任意一个 [a-z]意思是a,b....z中的任意一个

{ }表示边界 {4}上下边界都是4,必须四个字符,{4,}至少4个,{4,6} 4到6个,与前边的组合使用比如:

[0-9]{4,8} 表示4到8个数

2:按照+ * ?

X? X,一次或一次也没有
X* X,零次或多次
X+ X,一次或多次
X{n} X,恰好 n
X{n,} X,至少 n
X{n,m} X,至少 n 次,但是不超过 m
3:按照转义字符

预定义字符类

d 数字:[0-9]
D 非数字: [^0-9]
s 空白字符:[ tnx0Bfr]
S 非空白字符:[^s]
w 单词字符:[a-zA-Z_0-9]
W 非单词字符:[^w]
b 单词边界
B 非单词边界
A 输入的开头
G 上一个匹配的结尾
Z 输入的结尾,仅用于最后的结束符(如果有的话)
z 输入的结尾

以下代码是对正则表达式的运用

import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Main {

	public static void main(String[] args) {
		/*
		 * 1
		 * 字符匹配
		 */
		System.out.println(testMatches("12345323","1d{4,14}"));
		System.out.println(testMatches("22345323","[125]d{4,14}"));
		
		
		/*
		 * 2
		 * 字符截取
		 */
		String str = "c:javatest";
		String[] strs = testSprite(str,"\");//借钱去,是转义字符,要转义一个,需要,两个\
		for (String newstr : strs) {
			System.out.println(newstr);
		}

		str = "c.java.test";
		strs = testSprite(str,".");//。截取。     .代表所有字符
		for (String newstr : strs) {
			System.out.println(newstr);
		}

		str = "c       java        test 22";//空格截取,可能多个空格,所以" +"
		strs = testSprite(str," +");
		for (String newstr : strs) {
			System.out.println(newstr);
		}

		str = "dwadadw222a2xxaddawddwadq3aseaa";//叠词截取()分组,1表示第一组,需要转义,所以1,(.)的意思是第二个字符跟第一个字符一致
		strs = testSprite(str,"(.)1+");
		for (String newstr : strs) {
			System.out.println(newstr);
		}
		
		/*
		 * 3
		 * 字符替换
		 */
		str="I a2m haa23pp55y";
		System.out.println(testreplaceAll(str,"d",""));
		
		str="A beeeautttiful ggirll that I wwant ttoo bee myy ggiiirl frrieeend may coome too minee unniverssity";
		System.out.println(testreplaceAll(str,"(.)1+","$1"));
		
		/*
		 * 获取能匹配的字符
		 */
		List<String> list=testFind("After two days,ACM compition will be go","b[a-zA-z]{3}b");//必须是三个字符,前后两边是单词字符
		Iterator it=list.iterator();
		while(it.hasNext())
		{
			System.out.println(it.next());
		}


	}
	//Matcher是真正的强大
	public static LinkedList<String> testFind(String str,String regex)
	{
		LinkedList<String> list=new LinkedList<String>();
		//获取Pattern
		Pattern p=	Pattern.compile(regex);
		//获取Matcher
		Matcher m=p.matcher(str);
		while(m.find())
		{
			list.add(m.group());
		}
		return list;

	}
	public static boolean testMatches(String str,String regex) {

		return str.matches(regex);
	}

	public static String[] testSprite(String str,String regex) {

		return str.split(regex);
	}

	public static String testreplaceAll(String str,String regex,String replacement) {
		return str.replaceAll(regex,replacement);
	}

}

(编辑:李大同)

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

    推荐文章
      热点阅读