正则表达式入门学习笔记

  在线测试:  http://gskinner.com/RegExr/ 

变体

单字符转义: 如 . --- \.

块转义: () ---- \Q()\E

不区分大小写 : wuzhong -- (?i)WUZHONG

 

 

匹配多个字符之一

十六进制字符 : [a-fA-F0-9] OR [a-fA-F\d] OR (?!)[A-F\d]

非十六进制字符: [^A-Fa-f0-9]

 

匹配任意字符 : . (不包括换行符)

(?s ). (包括换行符在内的任意字符)

 

匹配文本行开始或结束

一行的开始和结束 :^alpha$

文本的开始和结束 : \Aalpha\Z

 

匹配整个单词

\bcat\b my cat is brown acata

 

匹配多个选择分支之一

\bcat\b|dog \b(aaaa|bbbb|cccc)\b

再次匹配先前匹配的文本

\d\d(\d\d)-\1-\1 >>>> 2008-08-08 2009-09-10

 

 

匹配重复次数

固定次数 :

\d{100}

 

可变次数

\d{1,100}

 

无限次数重复

\d{1,} === \d+

\d{0,} === \d*

\d{0,1} === \d?

 

贪婪问题

惰性量词: *; +? ; ?? ; {1,100}?

非贪婪

<p>.*?</p>

<p>hello<em>world</em></p><p>welcome</p>

 

贪婪

<p>.*</p>

<p>hello<em>world</em></p><p>welcome</p>

 

 

消除不必要的回溯

占有量词 : *+ ; ++ ; ?+ ; {1,100}+

 

java正则表达式编程

[$”’\n\d/\\] >> [$\”’\n\\d/\\\\]

 

Pattern regex = Pattern.compile(“[$\”’\n\\d/\\\\]”);

 

Pattern regex = Pattern.compile(“[$\”’\n\\d/\\\\]”,

Pattern.COMMENTS|Pattern.CASE_INSENSITIVE);

 

 

Matcher regexMatcher = regex.matcher(subjectString)

regexMatcher.reset(anotherString)

 

 

/**

* 如果检验一个正则表达式是否是部分或整体匹配一个字符串,可以按如下方式

*

* 注: 不要调用String.matches() , Patter.matches() , Matcher.matches(),它们都要求

* 匹配整个字符串,效率不高

*/

@Test

public void test(){

Pattern pattern = Pattern.compile(regex,Pattern.CASE_INSENSITIVE);

Matcher matcher = pattern.matcher("abc1234567ABCDEFG");

System.out.println(matcher.find());

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

System.out.println(matcher.start() + ">>>" + matcher.end());

//再次调用,查找下一个匹配

System.out.println(matcher.find());

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

System.out.println(matcher.start() + ">>>" + matcher.end());

System.out.println(matcher.replaceFirst("HELLOWROLD"));

//设置匹配字符串的范围

matcher.reset("ab1cda");

matcher.region(1, 100);

System.out.println(matcher.find());

//匹配不到,会抛异常

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

}

 

 

匹配多行字符串

  1. String lines[] = str.splite(“\r?\n”);

  2. 遍历每行进行匹配

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值