JAVA 正则表达式陈广佳版本(超具体)(3)

先给一个例子。下面这段措施可以测试正则表达式是否匹配字符串。第一个参数是要匹配的字符串,后头是正则表达式。正则表达式可以有多个。在Unix/Linux情况下,呼吁行下的正则表达式还必需用引号。

java.util.regex.*; TestRegularExpression { main(String[] args) { (args.length < 2) { System.out.println( + + ); System.exit(0); } System.out.println(/); ( i = 1; i < args.length; i++) { System.out.println( /); Pattern p = Pattern.compile(args[i]); Matcher m = p.matcher(args[0]); (m.find()) { System.out.println(" + m.group() + at positions " + m.start() + + (m.end() - 1)); } } } }

Java的正则表达式是由java.util.regex的Pattern和Matcher类实现的。Pattern工具暗示经编译的正则表达式。静态的compile( )要领认真将暗示正则表达式的字符串编译成Pattern工具。正如上述例程所示的,只要给Pattern的matcher( )要领送一个字符串就能获取一个Matcher工具。另外,Pattern尚有一个能快速判定可否在input内里找到regex的

matches(?regex, ?input)

以及能返回String数组的split( )要领,它能用regex把字符串支解开来。

只要给Pattern.matcher( )要领传一个字符串就能得到Matcher工具了。接下来就能用Matcher的要领来查询匹配的功效了。

matches()
lookingAt()
find()
find( start)

matches( )的前提是Pattern匹配整个字符串,而lookingAt( )的意思是Pattern匹配字符串的开头。

find( )

Matcher.find( )的成果是发明CharSequence里的,与pattern相匹配的多个字符序列。譬喻:

java.util.regex.*; com.bruceeckel.simpletest.*; java.util.*; FindDemo { Test monitor = Test(); main(String[] args) { Matcher m = Pattern.compile() .matcher(); (m.find()) System.out.println(m.group()); i = 0; (m.find(i)) { System.out.print(m.group() + ); i++; } monitor.expect( String[] { , , , , , , , , + + }); } }

"//w+"的意思是"一个或多个单词字符",因此它会将字符串直接解析成单词。find( )像一个迭代器,从新到尾扫描一遍字符串。第二个find( )是带int参数的,正如你所看到的,它会汇报要领从那边开始找——即从参数位置开始查找。

Groups

Group是指里用括号括起来的,能被后头的表达式挪用的正则表达式。Group 0 暗示整个表达式,group 1暗示第一个被括起来的group,以此类推。所以;

A(B(C))D

内里有三个group:group 0是ABCD, group 1是BC,group 2是C。

你可以用下述Matcher要领来利用group:

public int groupCount( )返回matcher工具中的group的数目。不包罗group0。

public String group( ) 返回上次匹配操纵(例如说find( ))的group 0(整个匹配)

public String group(int i)返回上次匹配操纵的某个group。假如匹配乐成,可是没能找到group,则返回null。

public int start(int group)返回上次匹配所找到的,group的开始位置。

public int end(int group)返回上次匹配所找到的,group的竣事位置,最后一个字符的下标加一。

java.util.regex.*; com.bruceeckel.simpletest.*; Groups { Test monitor = Test(); String poem = + + + + + + + ; main(String[] args) { Matcher m = Pattern.compile() .matcher(poem); (m.find()) { ( j = 0; j <= m.groupCount(); j++) System.out.print( + m.group(j) + ); System.out.println(); } monitor.expect( String[]{ + , , + , + , + , + , , + }); } }

这首诗是Through the Looking Glass的,Lewis Carroll的"Jabberwocky"的第一部门。可以看到这个正则表达式里有许多用括号括起来的group,它是由任意多个持续的非空字符('/S+')和任意多个持续的空格字符('/s+')所构成的,其最终目标是要捕捉每行的最后三个单词;'$'暗示一行的末了。可是'$'凡是暗示整个字符串的末了,所以这里要明晰地汇报正则表达式留意换行符。这一点是由'(?m)'符号完成的(模式符号会过一会讲授)。

start( )和end( )

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wsdxpw.html