java解析正则表达式_java正则表达式解析公式小结

本文深入探讨了Java中正则表达式的使用,包括如何利用String.split()和Pattern Matcher进行模式匹配。通过实例展示了正则表达式如何处理字符串分隔,避免空元素的出现,并详细解释了各种元字符和量词的含义。此外,还介绍了捕获组的概念及其在匹配过程中的作用。文章最后提到了正则表达式的在线测试工具,为读者提供了实践和验证正则表达式的好帮手。
摘要由CSDN通过智能技术生成

定义:正则表达式是一种可以用于模式匹配和替换的规范,一个正则表达式就是由普通的字符(例如字符a到z)以及特殊字符(元字符)组成的文字模式,它 用以描述在查找文字主体时待匹配的一个或多个字符串。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。注:区分大小写

Java中处理正则表达式的类:

java.lang.String     、  java.util.regex.Pattern(模式类)    、java.util.regex.Matcher(匹配类)

例子:

String    formula = "xa+xb+xc*(xd-xe)-xf/xg";

//第一种方式,用String.splite直接分隔

String spiltRules = "\\+|-|\\*|/|=|\\(|\\)";

String[] array = formula.split(spiltRules);

for (String s : array) {

System.out.println(s);

}

控制台输出结果:

3ef89be65445aafa1c49f54dab1549c8.png

//第二种,用.Pattern和Matcher模式

List list=new ArrayList();

Matcher matcher=Pattern.compile("\\bx\\w{1}").matcher(formula);

while (matcher.find()) {

list.add(matcher.group(0));

System.out.println(matcher.group(0));

}

System.out.println(list);

控制台输出结果:

c7b61ed2e31552b6477c28a0ddff2fee.png

1、用formula.split()会出现空格,原因是在formula.split()之后,如果有两个连续的,规则中能匹配到的运算符,就会在array中出现空的一个元素,如用此方法分隔字符窜,要将分隔出来的元素存入变量集合。

2、如果使用java中Pattern.compile(),先定义匹配规则,这里"\\bx\\w{1}"意思为,以x开头,然后任意一位数字或者字母结束.匹配成功后存入新的list,由于利用正则表达式匹配相关需要的字段,就不会存在上面那种如果多个运算符连在一起,会出现空元素的情况,这个集合可以不用再经过处理就可以直接使用。

source="xa+xb+xc*(xd-xe)-xf/xg"

正则表达式通用匹配符

正则表达式

说明

示例

.

匹配任何单个符号,包括所有字符

match="."      result: x a + x b + x c * (x d - x e ) - x f / x g

^xxx

在开头匹配正则xxx

match="^x"   result:xa

xxx$

在结尾匹配正则xxx

match=".g$"  result:xg

[abc]

能够匹配字母a,b或c

match="[xa]"  result:x a x x x x x x

[abc][12]

能够匹配由1或2跟着的a,b或c

[^abc]

当^是[]中的第一个字符时代表取反,匹配除了a,b或c之外的任意字符。

(“[^ab][^12].”, “c3#”) – true(“[^ab]..[^12]“, “xcd3″) – true

[a-e1-8]

匹配a到e或者1到8之间的字符

(“[a-e1-3].”, “d#”) – true(“[a-e1-3]“, “2″) – true

xx|yy

匹配正则xx或者yy

(“x.|y”, “xa”) – true(“x.|y”, “y”) – true

java正则表达式元字符

正则表达式

说明

\d

任意数字,等同于[0-9]

\D

任意非数字,等同于[^0-9]

\s

任意空白字符,等同于[\t\n\x0B\f\r]

\S

任意非空白字符,等同于[^\s]

\w

任意英文字符,等同于[a-zA-Z0-9]

\W

任意非英文字符,等同于[^\w]

\b

单词边界,也就是指单词和空格间的位置

\B

非单词边界

正则表达式量词

正则表达式

说明

x?

x没有出现或者只出现一次

x*

x出现0次或更多

X+

X出现1次或更多

X{n}

X正好出现n次

X{n,}

X出现n次或更多

X{n.m}

X出现至少n次但不多余m次

例如:[abc]+表示a,b,c出现一次或者多次

(abc)+ 表示abc出现一次或者多次

正则表达式capturing group

Capturing group是用来对付作为一个整体出现的多个字符。你可以通过使用()来建立一个group。输入字符串中和capturing group相匹配的部分将保存在内存里,并且可以通过使用Backreference调用。

你可以使用matcher.groupCount方法来获得一个正则pattern中capturing groups的数目。例如((a)(bc))包含3个capturing groups; ((a)(bc)), (a) 和 (bc)。

Matcher类有start()和end()索引方法,他们可以显示从输入字符串中匹配到的准确位置。

列二:

\d 表示匹配一个数字字符。等价于 [0-9]。后面的{3}就是连续匹配三位.

所以\d{3}-\d{8} 和 \d\d\d-\d\d\d\d\d\d\d\d 的意思一样,代表"3个数字-8个数字"的格式的字符串.

注:

关于"\b"和"\\b"的区别:

\b  : 就是正则表达式中单纯的语法;

\\b :这是java中转义(转译)字符,"\\"代表反斜杠.  在字符串中定义的话,在正则匹配规则中,等同于"\b".

Matcher matcher = ttern.compile("\\bx\\w{1}").matcher(formula);// 用正则匹配 就比如说这句,"\\bx\\w{1}"在最后使用的时候,就是"\bx\w{1}"

补充一点转译字符:

特殊字符:

\":双引号

\':单引号

\\:反斜线

控制字符:

\' 单引号字符

\\ 反斜杠字符

\r 回车

\n 换行

顺便提供一个正则表达式的使用语法说明,校验,测试的网站.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值