正则表达式笔记

用AAA去匹配AAABBBCCC,AAA:匹配字符串,AAABBBCCC:被匹配字符串
Pattern pattern = Pattern.compile(sub);
Matcher matcher = pattern.matcher(html);
while(matcher.find())
System.out.println(matcher.group());
--------------------------------------------------------------------
() 表示一个捕获组:(?<xxx>) => matcher.group("xxx");
或表示小括号内连续字符可以作为多选进行匹配:精确匹配AB或BC => (AB|BC)
[] 用于组合不同字符类型
{} 用于表示范围:{x,y} => x≤?≤y;{x,} => x≤?;


--------------------------------------------------------------------
. .=[\w\W]代表除\r\n以外的任何单个字符
\w 单词字符[a-zA-Z_0-9]
\W 非单词字符[^\W]
\s 一个空格


--------------------------------------------------------------------


^ 表示匹配一行的开头:被匹配字符串必须以^之后的东西开头才能匹配到
e.g:匹配“aa123;”=> "^\w+"
$ 表示匹配一行的结尾:被匹配字符串必须以$之前的东西结尾才能匹配到
e.g:匹配“123;”=> ".+;$"


+ 表示匹配一个或多个(匹配多个)


? 表示匹配0个或1个(有或无)


* 表示匹配0个或多个


()? 表示小括号内的部分参与分组且可有可无
(?:xxx) 表示小括号内的部分不参与捕获组的分组
(?:xxx)? 表示xxx不参与分组且xxx是可有可无的


--------------------------------------------------------------------


小写字母匹配: [a-z]=[abcdefghizjlmnopqrstuvwxyz]
不在小写字母范围内匹配: [^a-z]


大写字母匹配: [A-Z]=[ABCDEFGHIJKLMNOPQRSTUVWXYZ]
不在大写字母范围内匹配: [^A-Z]


忽视大小写: (?i)\w
Pattern.compile(sub,Pattern.CASE_INSENSITIVE);


中文匹配: [/u4e00-/u9fa5] 来自unicode表
[\\x{4e00}-\\x{9fa5}] 来自16进制

--------------------------------------------------------------------


如果在写正则表达式的时候用小括号括住某一部分,那么这一部分在程序读取时会被自动地认为是一个捕获组,这时如果用matcher.group(i)来取的话就可以单独地取出小括号内的这部分。
e.g: sub="@(.+)",html="@123"
matcher.group(); => "[@123]"
matcher.group(1); => "123"


像上述方法还有另一种写法,即给这个分组定义一个索引值key:(但java6及之前的版本没有group(String str)的方法,从7开始之后才有)
sub="@(?<key>.+)"
matcher.group("key"); => "123"


如果想要表示截取AB或BC这样单个或连续字符串就可以使用(AB|BC)这样来表示,如果使用
[AB|BC]会导致匹配出A/B/C这三个字符排列组合的所有结果


常用“.+”来表示贪婪选取所有字符,用“.+?”来表示非贪婪选取所有字符,即只要符合某一标准即作为一个捕获组。



元字符 语法说明
* 重复零次或更多次
+ 重复一次或更多次
? 重复零次或一次
{n} 重复n次
{n,} 重复n次或更多次
{n,m} 重复n到m次
. 匹配除换行符以外的任意字符
\w 匹配字母或数字或下划线或汉字
\s 匹配任意的空白符
\d 匹配数字
\b 匹配单词的开始或结束
^ 匹配字符串的开始
& 匹配字符串的结束
\w 匹配任意不是字母,数字,下划线,汉字的字符
\S 匹配任意不是空白符的字符
\D 匹配任意非数字的字符
\B 匹配不是单词开头或结束的位置
[^x] 匹配除了x以外的任意字符


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值