美文网首页
Golang规则表达式之字符类

Golang规则表达式之字符类

作者: CodingCode | 来源:发表于2021-09-13 02:13 被阅读0次
+----+----------------------------------------------------------------------+
|    |         规则表达式之字符类                                              |
+----+--------------+------------------------+------------------------------+
| 01 | [[:alpha:]]  | 字母符号                | ([A-Za-z])
| 02 | [[:alnum:]]  | 字母数字                | ([[:alpha:][:digit:]) == ([A-Za-z0-9])
| 03 | [[:word:]]   | 标识符(字母数字+下划线)   | ([[:alnum:]_])        == ([A-Za-z0-9_])
| 04 | [[:punct:]]  | 标点符号                | ([!"#$%&’()*+,\-./:;<=>?@[\\\]^_`{|}~])
| 05 | [[:graph:]]  | 可见符号                | ([[:alnum:][:punct:]]) == 
                                              ([A-Za-z0-9!"#$%&'()*+,\-./:;<=>?@[\\\]^_`{|}~])
| 06 | [[:print:]]  | 可打印符号(可见符号+空格) | ([[:graph:] ]) == ([[:alnum:][:punct:] ])

| 07 | [[:blank:]]  | blank           | ([\t ])
| 08 | [[:space:]]  | whitespace      | ([\t\n\v\f\r ])
| 09 | [[:lower:]]  | lower case      | ([a-z])
| 10 | [[:upper:]]  | upper case      | ([A-Z])

| 11 | [[:digit:]]  | digits          | ([0-9])
| 12 | [[:xdigit:]] | hex digit       | ([0-9A-Fa-f])

| 13 | [[:ascii:]]  | ASCII           | ([\x00-\x7F])
| 14 | [[:cntrl:]]  | control         | ([\x00-\x1F\x7F])
+----+--------------+-----------------+-------------------------------------+

举例来说:

text := "abc123XXX"
fmt.Printf("%q\n", regexp.MustCompile(`[[:digit:]]`).FindAllString(text, -1))
// ["1" "2" "3"]
fmt.Printf("%q\n", regexp.MustCompile(`[[:alpha:]]+`).FindAllString(text, -1))
// ["abc" "XXX"]

一个题外话:为什么要用两层方括号([[]]),用一层不行吗?
其实这个很容易理解,如果是一层方括号,因为一层方括号已经有语义了,就是任选其中的字符,比如[:alpha:]匹配的是任意字符(':', 'a', 'l', 'p', 'h'),也就是说[:alpha:]==[:alph](去掉重复的':''a'),这样[:alpha:]并没有被解析成想要的alphabetic letter,而只是列出的那几个字母的选择。

因此:
[[:alpha:]]==[a-zA-Z]
然后还可以组合,像下面这些表达式含义是一样的:

  • [[:alpha:][:digit:]]
  • [[:alpha:]0-9]
  • [a-zA-Z0-9]

所以如果是一层方括号,那么就按照普通的[xyz]字符类(character class)来解析,如果是两层方括号,那么里面层的方括号就会按照命名的ASCII character class被解开。

还是举个例子:

text := "abc123:ph"
fmt.Printf("%q\n", regexp.MustCompile(`[[:alpha:]]+`).FindAllString(text, -1))
// ["abc" "ph"]
fmt.Printf("%q\n", regexp.MustCompile(`[:alpha:]+`).FindAllString(text, -1))
// ["a" ":ph"]
fmt.Printf("%q\n", regexp.MustCompile(`[:alph]+`).FindAllString(text, -1))
// ["a" ":ph"]

相关文章

  • Golang规则表达式之字符类

    举例来说: 一个题外话:为什么要用两层方括号([[]]),用一层不行吗?其实这个很容易理解,如果是一层方括号,因为...

  • Golang规则表达式之元字符

    规则表达式中的元字符(Meta characters) 注意的是: ^,$,\A,\z,\Z,\b,\B 这几个元...

  • 正则表达式

    正则表达式 正则表达式是用于操作字符串的一个规则,正则表达式的规则使用了特殊的符号表示。 一、预定义字符类 注意:...

  • 知识分享之Golang——Bleve中的字符过滤器和分词规则

    知识分享之Golang——Bleve中的字符过滤器和分词规则 背景 知识分享之Golang篇是我在日常使用Gola...

  • Python学习笔记七(正则表达式)

    正则表达式 特殊的字符序列,用于测试字符序列是否匹配我们设定的字符序列。 RE规则 常见正则表达式三类(man g...

  • 正则规则

    正则表达式:专门规定字符串中字符*格式规则*的表达式 何时使用:只要定义字符串格式规则,都用正则表达式 1、字符集...

  • 知识分享之Golang——用于在Golang中的加解密工具类,包

    知识分享之Golang——用于在Golang中的加解密工具类,包含MD5、RSA超长字符串、CBC、ECB等算法 ...

  • 正则表达式

    概念: 按照某种规则匹配符合条件的字符串 语法: 元字符: 在正则表达式有特殊含义的非字母字符 边界类^:匹配开头...

  • JS高级-正则表达式

    正则表达式:也叫规则表达式,按照一定的规则组成的一个表达式,这个表达式的作用主要是匹配字符串。 元字符 . 任意一...

  • 原生JS-08

    • 正则表达式对象• 什么是正则表达式:所谓正则表达式也称为规则表达式,是由一些普通字符和特殊字符(元字符...

网友评论

      本文标题:Golang规则表达式之字符类

      本文链接:https://www.haomeiwen.com/subject/pdwtgltx.html