java+正则+递归匹配_正则表达式(含递归用法)

(原创)

正则表达式,日常用于匹配。

简单小记一下:

一、基本

\   表示转义

\xA9    \x 16进制

.     任意字符

a|b   a或b,注意,如果是 a|ab,去匹配 ab ,那么大多数引擎是匹配到 a,只有少数是匹配到ab

[abc]    set内的或

[a-zA-Z0-9]   范围的一种写法

[^abc]    非set

^   起始(匹配位置,而不是字符)

$   结束(匹配位置,而不是字符)

\b   word boundary 单词位置, 这种位置左右边有且仅有一边是字符。

例如: \b.\b 匹配 abc def ghi 三个单词中间的两个空格

二、数量,懒惰,独占

?     0-1

??    lazy

?+    Possessive ,不回溯

例如,abc?+c ,abcc 能行,abc 不行

*     0-无穷

*?  lazy

*+    Possessive ,不回溯

+     1-无穷

+?   lazy

++   Possessive ,不回溯

例如: abc++c  是不能匹配任何字符串的~

a{n}    n个a

a{n,m}    范围 n到m个

三、捕获组

(groupa)     括号括起来

捕获组可以具有索引值,英文是 backreference,如

(abc|def)=\1 匹配 abc=abc

原子组,不回溯:

a(?>bc|b)c 匹配abcc,但abc不行

向前(右)向后(左):

a(?=b)   向前为

a(?!b)    向前非

(?<=a)b   向后为

(?

索引(backreference)数字序列:从左到右,从外到内递归递增,例如:

(str1)(str2(str3))(str4)

str1 索引1,str2(str3) 整体索引2 ,str3 索引3 ,str4 索引4

四、递归用法:

注意,不是所有语言都支持

例如: a\g<0>?b       \g<0> 代表递归匹配整个表达式,?还是代表0次或1次

整个表达式可以匹配 ab ,aabb,aaabbb ......(k个a,k个b)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值