读书人

正则表达式入门学习札记

发布时间: 2012-12-18 12:43:41 作者: rapoo

正则表达式入门学习笔记

??在线测试: ?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/\\\\]

?

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

?

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

Pattern.COMMENTS|Pattern.CASE_INSENSITIVE);

?

?

MatcherregexMatcher = regex.matcher(subjectString)

regexMatcher.reset(anotherString)

?

?

/**

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

*

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

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

*/

@Test

publicvoidtest(){

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

Matchermatcher = 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());

}

?

?

匹配多行字符串

    Stringlines[] = str.splite(“\r?\n”);

    遍历每行进行匹配

读书人网 >编程

热点推荐