先说些常规字符代表的含义
. // 1字符,一定是一个,多一个少一个都不行 ? // 0个或一个 * // 0个或多个 + // 1个或多个某个区间内所有字符 如 [a-zA-Z0-9]某几个的范围所有字符 [abcd]取非的所有字符[^a]
在中括号中的字符不再有特殊的含义,匹配全部的 .和* [.][*]
首先要明白的是如果正则表达式是在字符串里,那么使用转义的话,先是编程语言解转义,然后是正则引擎解转义,所以你需要小心,如:Stirng regString = "\\.";表示的是匹配原生点号,第一个反斜杠被编程语言解析到的时候,被认为是转义标记,有效串变为\.,\.被正则引擎解释 ,遇到反斜杠,认为和后面的点构成转义,得到原生意义的点。
在和中括号搭配使用时,[^a]表示非a的任意字符,那[^abc]呢?事实上,他表示的是任意非a,非b,非c的字符,这里的非有承前省的语义,使用时注意。[^.\/]表达的含义呢?他是要匹配任意非点和非正斜杠的字符。
零宽度正先行断言,匹配exp表达式前面的内容,如regString="a(?=\\/)",目标串"a/",中a就被匹配上,注意断言表达式不参与匹配。
这里需要注意的是一定要先find(),如果直接调用group(),那么会有java.lang.IllegalStateException: No match found的异常抛出,因为find()中会有必要的匹配行为,不能缺少。