Java正则表达式高级应用

// "^" in "[]" has different mean
// "[^abc]"=="[not(a and b and c)]"
Pattern.compile("[^abc]").matcher("abc").find() // false
// chinese
Pattern.compile("[\u4e00-\u9fa5]").matcher("孙子").find() //true
// match neither chinese nor digital
Pattern.compile("[^\u4e00-\u9fa5\\d]").matcher("孙子123").find() //false 

不包含某字符串的正则表达式

问题:
两个字符串:“公交:110路地铁:1号线”“广兰路附近地铁:1号线”
要求匹配后者,不匹配前者

想当然用[^(\\d+路)]匹配不含“110路”的字符串,但是这是错误的写法。

(?=...) 肯定式向前查找,逐字查看,直到该字右边有“交”
(?!...) 否定式向前查找,逐字查看,直到该字右边没有“交”
(?<=...) 肯定式向后查找, 逐字查看,直到该字左边有“交”
(?<!...) 否定式向后查找, 逐字查看,直到该字左边没有“交”

答案是:(?<=\\d+路)地铁

一个应用

Matcher  m = Pattern.compile("(?<=《)(.?)*(?=》)").matcher("《河马石狮》");
        if(m.find()){
            System.err.println(m.group()); // 河马石狮
        }

拓展阅读:

请移步http://blog.csdn.net/xxd851116/article/details/7576624
讲的很清楚
关于细节,这篇讲得更容易懂http://www.jb51.net/article/52491.htm

你可能感兴趣的:(java,正则表达式)