正则表达式高级

2019-08-04  本文已影响0人  林万程

正则表达式高级
——《精通正则表达式》
+Java/Go/Python官方文档
+多年经验
+实验结果
知识整理

[TOC]

第3章 正则表达式的特性和流派概览

常用的元字符和特性 102

基本语法
https://www.runoob.com/regexp/regexp-metachar.html

量词

分组与捕获

"abc".replaceAll("a(.*)c", "s$1"); // sb
"b2b".replaceAll("(.*)2\\1", "s$1"); // sb

"b2b".replaceAll("(?<a>.*)2\\k<a>", "s${a}"); // sb

Pattern p = Pattern.compile("a(?<a>.*)c");
Matcher m = p.matcher("abc");
while (m.find()) {
    System.out.println(m.group(1)); // b
    System.out.println(m.group("a")); // b
}

反向引用组编号n为0代表全部,同m.group()

Java不支持:

边界

锚点:

环视结构(零长度断言,golang不支持):

"abc".replaceAll("(?<=a)b(?=c)", ""); // ac

查找时用捕获比环视更容易阅读

注释与模式

通用常用

Java

Python

其他

也可以这样用:(?-i) (?i:...) (?-i:...)

Pattern p = Pattern.compile("a(?i)b(?-i)c(?i:d)");
Matcher m = p.matcher("aBcD");

Pattern p = Pattern.compile("a", Pattern.CASE_INSENSITIVE);

字符组

Perl字符族:

ASCII字符族(来自golang):
[[:alnum:]]字母数字同[0-9A-Za-z]
[[:alpha:]]字母同[A-Za-z]
[[:ascii:]]ASCII同[\x00-\x7F]
[[:blank:]]空白[\t ]
[[:cntrl:]]控制[\x00-\x1F\x7F]
[[:digit:]]数字[0-9]
[[:graph:]]图形[!-~] == [A-Za-z0-9!"#$%&'()*+,\-./:;<=>?@[\\\]^_{|}~][[:lower:]]小写[a-z][[:print:]]可打印[ -~] == [ [:graph:]][[:punct:]]标点[!-/:-@[-{-~]
[[:space:]]空字符[\t\n\v\f\r ]
[[:upper:]]大写[A-Z]
[[:word:]]字符[0-9A-Za-z_]
[[:xdigit:]]十六进制[0-9A-Fa-f]

Unicode组:

java汉字

"Hi,你好!".replaceAll("[^\\p{javaIdeographic}]", ""); // 你好
Character.isIdeographic​(int codePoint) // CJKV(中文,日文,韩文和越南文)表意文字

https://docs.oracle.com/en/Java/Javase/12/docs/api/Java.base/Java/util/regex/Pattern.html

golang汉字

package main_test

import (
    "fmt"
    "regexp"
)

func ExampleFindAllString() {
    r := regexp.MustCompile(`[\p{Han}]+`) // 汉字
    split := r.FindAllString("你好,中国!", -1)
    for _, s := range split {
        println(s) // 不计入output
        fmt.Println(s)
    }

    // Output:
    // 你好
    // 中国
}

https://studygolang.com/static/pkgdoc/pkg/regexp.htm

https://godoc.org/regexp/syntax

https://godoc.org/regexp

python汉字

# coding=utf-8
import re
if __name__ == "__main__":
    print(re.findall(r'[\u4e00-\u9fa5]+', '你好,中国!'))

https://docs.Python.org/zh-cn/3/library/re.html#contents-of-module-re

字符

上一篇下一篇

猜你喜欢

热点阅读