正则表达式
2017-12-30 13:27
155 查看
正则表达式(Reglar Expression):
基本语法:普通字符:字母、数字、汉字、下划线以及没有特殊定义的标点符号都是”普通字符”。
表达式中的普通字符,在匹配一个字符串的时候,匹配与之相同的一个字符。
高级语法:
大小写是取反的意思。
\d : 0-9之间任意的一个数字。
\D :0-9之间任意的一个非数字。
\w :任意一个字母数字下划线。
\W :任意一个除了字母数字下划线。
\s :匹配空白符。(空格、制表符、换行符)
\S :匹配非空白符。
. :匹配任意一个字符(除了换行符)。
[\s\S] :匹配所有字符。
自定义字符集合:
[a57%] :匹配"a"或"5"或"7"或"%"的其中一个。 [^abc] :匹配"a""b""c"之外的任意一个字符。 [f-k] :匹配"f"-"k"之间的字符。 [^2-8a-n]:匹配"a"-"n",2-8之外的任意字符。 正则表达式的特殊符号,被包含到[]中,则失去特殊意义,除了 ^ - 之外。 标准字符集合除了 . 外如果包含于[]中,自定义字符集合将包含该集合。
量词:
{n}:修饰前一个表达式重复n次。 {m,n}:最少m次,最多n次。 {m,}:至少m次。 贪婪模式:量词默认的是匹配最多数。 勉强模式:要想匹配最少数就停止,在{}后加上?即可。 ?:这里与紧跟在{}后的?不同。它相当于{0,1}的意思。 + :表达式至少出现1次,相当于{1,}。 * :表达式不出现或者出现任意次,相当于{0,}。
字符边界:
^ :只匹配字符串开始的字符位置。 $ :只匹配字符串结束的字符位置。 \b :前面的字符和后面的字符不全是\w的字符位置。 匹配模式: IGNORECASE:匹配字符时忽略大小写。 SIGLELINE:单行模式,整个文本作为一行。 MULTILINE:多行模式,一行作为一个文本。 在多行模式下若要匹配开头字符,在字符前加上\A即可。 在多行模式下若要匹配结束字符,在字符后加上\Z即可。
选择符和分组:
|:匹配左边或者右边。 ():捕获组。在组中匹配到的字符再次重复一次。 例如:goto gogo toto togo 想要获得gogo toto的话 应该这样写:([a-z]{2})\1 [a-z]{2}会匹配以上所有, 一个括号为一组,从1开始。那么[a-z]{2}整体为第一组。 第一次匹配到的go会存起来。后面的\1表示第一组再次重复。 即只能匹配到go后面还是go的。 同样。第二次匹配到的to是一样的。 分组规则: (([1-9]{3})([a-z]))([^s-d]) ([1-9]{3})([a-z])为第一组。\1 ([1-9]{3})为第二组。\2 ([a-z])为第三组。\3 ([^s-d])为第四组。\4 (?:):非捕获组。 捕获组会把第一次匹配到的字符存在内存里, 只要求()作为组织结构的作用时,可以使用。 但是肯定就不能起到捕获组的作用了。
预搜索(零宽断言、环视):
(?=表达式):只能匹配到以表达式结尾的前面的字符。 (?!表达式):只能匹配到不以表达式结尾的前面的字符。 (?<=表达式):只能匹配到以表达式开头的后面的字符。 (?<!表达式):只能匹配到不以表达式开头的后面的字符。 本身断言匹配到的是不会计入字符的,只会匹配到断言匹配到的前面的字符。
Java复杂文本操作:
Java相关的正则表达式位于java.util.regex包下
Pattern类:正则表达式对象。
Matcher类:匹配对象。matches():将整个字符串与正则匹配。
find():扫描输入的序列查找与该模式匹配的下一个子序列。
group():将find的方法匹配的字符串返回。
replace():将正则对象的匹配规则所指定的字符替换为方法指定的字符。
split():分隔操作。
public class RegexTest { public static void main(String[] args) { //在asd131656498匹配整个字符串。\w+ //表达式 abd7 对象 Pattern p=Pattern.compile("\\w+"); //创建匹配对象 Matcher m=p.matcher("asd1514&&654561"); boolean matches = m.matches(); //调用匹配引擎匹配 System.out.println(matches); } }
关于正则内容过一遍大致有印象即可。等到需要时再细细研究。