# regExp_learn **Repository Path**: johndriver/regExp_learn ## Basic Information - **Project Name**: regExp_learn - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2022-05-05 - **Last Updated**: 2022-05-05 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 正则表达式 ## 转义符号 * java使用`\\`代表其他语言的`\` * 需要转义的表示 ```text ()[]{} : \\( \\) \\[ \\] \\{ \\} . * + ? : \\. \\* \\+ \\? ^ $ : \\^ \\$ \ : \\\\ ``` * [] 内有的不需要转义,可以直接使用 需要的有:`[`和`^`和`\` ```text ()[]{} : [(] [)] [{] [}] [\\[] []] . * + ? : [.] [*] [+] [?] ^ $ : [\^] [$] \ : [\\\\] ``` ## 字符匹配符 |符号|含义|示例|匹配|取非| |----|----|----|----|---| |.|非\n的一个字符|a..b|aaab,a#*b|\\n| |\\d|digit:一个数字:[0-9]|\\d{3}(\\d)?|123,9876|\\D| |\\w|word:字母数字下划线:[0-9A-Za-z_]|\\d{3}\\w{4}:3个数字+4个word|123456dw,1234wood|\\W| |\\s|space:空白符:[\\t\\n\\r\\v\\f]| | |\\S| * [0-9] [^0-9] * [abc123] [^abc123] ## 不区分大小写 1. (?!): * (?i)AbC 匹配(abc不区分大小写):ABC abc aBc * a(?i)bc 匹配(bc不区分大小写):aBC abc * a((?i)b)c 匹配(b不区分大小写):abc aBc 2. Pattern.CASE_INSENSITIVE * Pattern.compile("abcd",Pattern.CASE_INSENSITIVE); * Pattern.compile("abcd",2); ## 限定符 * 一个字符直接用,多个字符任选一个重复用`[]`,多个字符一起用`()`括起来 * 非贪婪模式,后面再加个`?`,表示匹配到最少数量就可以 |符号|含义|示例|说明|匹配| |----|----|----|----|----| |*|{0,}|a* [abc]* (abc)*| |+|{1,}|a+ [abc]+ (abc)+| |?|{0,1}|a? [abc]? (abc)?| |{n}| |a{4} [abc]{4} (abc){4}| |{m,n}| |a{2,3} [abc]{2,3} (abc){2,3}| |{m,}| |a{2,} [abc]{2,} (abc){2,}| ## 选择匹配符 * `|` ```text \\d{3}|[a-zA-Z]{3} ``` ## 定位符 |符号|含义|示例|说明|匹配| |----|----|----|----|----| |^|指定起始字符|^[0-9]+其他|以1-n个数字开头,| |$|指定结束字符|其他[a-zA-z]{3,5}$|以3-5个字母结束| |\\b|字符边界|\\bspac|spac的左边为空格或字符起始或标点符号| |\\B|非字符边界|space\\B| ## 分组组合和反向引用 1. 捕获分组 |构造|说明|示例| |----|----|----| |(表达式)|非命名分组:group(0):匹配全部,分组按照左括号的顺序分为1,2,3---| abc(bc)(c(d)):
group(0):abcbccd
group(1):bc
group(2):cd
group(3):d| |?\(表达式)|命名分组:除了使用group(int index),还可以适应group(string name)获取结果|abc(?\bc)(?\c(?\d)) 2. 非捕获分组:使用()但是取消分组,不能使用group()获取 * (?:表达式) * 处理的问题:industr(y|ies),使用或,但是不要()分组,后缀(y|ies)也匹配 * 使用:industr(?:y|ies) * (?=表达式) * 处理的问题:windows(8|10|11)通过后缀(8或10或11)获取后缀之前的字符(windows),但不要后缀(8或10或11) * 使用:windows(?=8|10|11) * (?=表达式) * 处理的问题:通过后缀非(8或10或11)的如window95获取后缀之前的字符(windows),但不要后缀95 * 使用:windows(?!8|10|11) 3. 反向引用 * \\n * 在正则表达式中使用,表示重复第n个分组的内容 * 例子:(\\d)\\1{2} 表示第一个分组重复2次,达到3个相同的数字:如222 333 4444 * $n * 在正则表示式外引用分组neirong * 例子 ```text String s = Pattern.compile("(\\w{2})\\1{2}(cd)") .matcher("abababcdefgh") .replaceAll("$2"); ``` 1. matcher结果匹配:abababcd 2. $2:表示第二个括号匹配的内容:cd (补充:$1为:ab) 3. 式子表示:将`abababcdefgh`中的`abababcd`全部替换为`ab`,相当于 ```text "abababcdefgh".replaceAll("(\\w{2})\\1{2}(cd)", "$2"); ``` ## 特殊字符