10 Dec 2014
正规表示法并不是某种工具独占的用法 它是一种很重要且流行的字符串处理方法
不同的编码对正规表示法的抓取字符会有影响, 但下面这些特殊符号的意义是确定的 特殊符号|代表意义 —|— [:alnum:]|代表英文大小写字节及数字,亦即 0-9, A-Z, a-z [:alpha:]|代表任何英文大小写字节,亦即 A-Z, a-z [:blank:]|代表空白键和[Tab]按键 [:cntrl:]|代表键盘上面的控制按键,即 CR, LF, Tab, Del.. 等 [:digit:]|代表数字而已,即 0-9 [:graph:]|除了空白字节 (空白键与 [Tab] 按键) 外的其他所有按键 [:lower:]|代表小写字节,亦即 a-z [:print:]|代表任何可以被打印出来的字节 [:punct:]|代表标点符号 (punctuation symbol),即:” ‘ ? ! ; : # $… [:upper:]|代表大写字节,亦即 A-Z [:space:]|任何会产生空白的字节,包括空白键, [Tab], CR 等等 [:xdigit:]|代表16进制的数字类型,包括: 0-9, A-F, a-f 的数字与字节
POSIX标准正则编码与其他用法的对应表格
| POSIX | Non standard | Perl Tcl | Vim | ASCII |
|---|---|---|---|---|
| [:alnum:] | [A-Za-z0-9] | |||
| [:word:] | \w | \w | [A-Za-z0-9_] | |
| \W | \W | [^A-Za-z0-9_] | ||
| [:alpha:] | \a | [A-Za-z] | ||
| [:blank:] | \s | [ \t] | ||
| \b | < > | (?<=\W)(?=\w)丨(?<=\w)(?=\W) | ||
| [:cntrl:] | [\x00-\x1F\x7F] | |||
| [:digit:] | \d | \d | [0-9] | |
| \D | \D | [^0-9] | ||
| [:graph:] | [\x21-\x7E] | |||
| [:lower:] | \l | [a-z] | ||
| [:print:] | \p | [\x20-\x7E] | ||
| [:punct:] | [][!“#$%&’()*+,./:;<=>?@\^_`{丨}~-] | |||
| [:space:] | \s | \_s | [ \t\r\n\v\f] | |
| \S | \S | [^ \t\r\n\v\f] | ||
| [:upper:] | \u | [A-Z] | ||
| [:xdigit:] | \x | [A-Fa-f0-9] |
不存在于POSIX标准字符之中的字符含义
[:word:]/\w - Alphanumeric characters plus “_”\W - Non-word characters\b/\< \> - Word boundaries\D - Non-digits\S - Non-whitespace characters| RE 字符 | 含义与例子 |
|---|---|
| ^word | ## 以word开头的行 ## 查找行首为”#“开始的那一行,并列出行号 grep -n ‘^#’ regular_express.txt |
| word$ | ## 以word结尾的行 ## 查找行尾为”!“的那一行,并列出行号 grep -n ‘!$’ regular_express.txt |
| . | ## 代表『一定有一个任意字节』的字符! ## 查找”e”+“任意一个字符,包括空格”+“e”的字符串 grep -n ‘e.e’ regular_express.txt |
| |## 脱义字符,将特殊符号的特殊意义去除! ## 查找含有单引号 ‘ 的那一行! grep -n \’ regular_express.txt |
|
| * | ## 重复零个到无穷多个的前一个 RE 字符 ## 找出含有 (es) (ess) (esss) …的字串 grep -n ‘ess*’ regular_express.txt ## 因为 * 可以是 0 个,所以 es 也是符合带搜寻字串。 ## 另外,因为 * 为重复『前一个 RE 字符』的符号,因此,在 * 之前必须要紧接著一个 RE 字符!例如任意字节则为 『.*』 ! |
| [list] | ## 字节集合的 RE 字符,里面列出想要选择的字节! ## 搜寻含有 (gl) 或 (gd) 的那一行 grep -n ‘g[ld]’ regular_express.txt ## 需要特别留意的是,在 [] 当中『谨代表一个待搜寻的字节』, 例如『 a[afl]y 』代表搜寻的字串可以是 aay, afy, aly 即 [afl] 代表 a 或 f 或 l 的意思! |
| [n1-n2] | ## 字节集合的 RE 字符,里面列出想要撷取的字节范围! ## 搜寻含有任意数字的那一行! grep -n ‘[A-Z]’ regular_express.txt ## 需特别留意,在字节集合 [] 中的减号 - 是有特殊意义的,他代表两个字节之间的所有连续字节!但这个连续与否与 ASCII 编码有关,因此,你的编码需要配置正确(在 bash 当中,需要确定 LANG 与 LANGUAGE 的变量是否正确!) 例如所有大写字节则为 [A-Z] |
| [^list] | ## 字节集合的 RE 字符,里面列出不要的字串或范围! ## 搜寻的字串可以是 “oo”+“任意一个字符”,除了”oot” grep -n ‘oo[^t]’ regular_express.txt ## 那个 ^ 在 [] 内时,代表的意义是『反向选择』的意思。 例如,我不要大写字节,则为 [^A-Z]。但是,需要特别注意的是,如果以 grep -n [^A-Z] regular_express.txt 来搜寻,却发现该文件内的所有行都被列出,为什么?因为这个 [^A-Z] 是『非大写字节』的意思, 因为每一行均有非大写字节,例如第一行的 “Open Source” 就有 p,e,n,o…. 等等的小写字 |
| {n,m} | ## 连续 n 到 m 个的『前一个 RE 字符』 ## 若为 {n} 则是连续 n 个的前一个 RE 字符, ## 若是 {n,} 则是连续 n 个以上的前一个 RE 字符! ## 在 g 与 g 之间有2到3的 o 存在的字串,亦即 (goog)(gooog) grep -n ‘go{2,3}g’ regular_express.txt |
| RE 字符 | 含义和例子 |
|---|---|
| + | ## 重复『一个或一个以上』的前一个 RE 字符 ## 搜寻 (god) (good) (goood)… 等等的字符串 egrep -n ‘go+d’ regular_express.txt |
| ? | ## 『零个或一个』的前一个 RE 字符 ## 搜寻 (gd) (god) 这两个字串。 egrep -n ‘go?d’ regular_express.txt ## ‘go+d’ 与 ‘go?d’的结果集合与 ‘go*d’ 相同 |
| 丨 | ## 用或( or )的方式找出数个字串 ## 搜寻 gd 或 good 这两个字串 egrep -n ‘gd丨good’ regular_express.txt egrep -n ‘gd丨good丨dog’ regular_express.txt |
| () | ## 找出『群组』字串 ## 搜寻 (glad) 或 (good) 这两个字串 egrep -n ‘g(la丨oo)d’ regular_express.txt |
| ()+ | ## 多个重复群组的判别 ## 用echo打印『AxyzxyzxyzxyzC』,然后查找A和C中间包含1或多个xyz的判别 echo ‘AxyzxyzxyzxyzC’ 丨 egrep ‘A(xyz)+C’ |
ASCII码表:
| ASCII | Hex | Symbol |
|---|---|---|
| 0 | 0 | NUL |
| 1 | 1 | SOH |
| 2 | 2 | STX |
| 3 | 3 | ETX |
| 4 | 4 | EOT |
| 5 | 5 | ENQ |
| 6 | 6 | ACK |
| 7 | 7 | BEL |
| 8 | 8 | BS |
| 9 | 9 | TAB |
| 10 | A | LF |
| 11 | B | VT |
| 12 | C | FF |
| 15 | F | SI |
| 14 | E | SO |
| 16 | 10 | DLE |
| 17 | 11 | DC1 |
| 18 | 12 | DC2 |
| 19 | 13 | DC3 |
| 20 | 14 | DC4 |
| 21 | 15 | NAK |
| 22 | 16 | SYN |
| 23 | 17 | ETB |
| 24 | 18 | CAN |
| 25 | 19 | EM |
| 26 | 1A | SUB |
| 27 | 1B | ESC |
| 28 | 1C | FS |
| 29 | 1D | GS |
| 30 | 1E | RS |
| 31 | 1F | US |
| 32 | 20 | (space) |
| 33 | 21 | ! |
| 34 | 22 | “ |
| 35 | 23 | # |
| 36 | 24 | $ |
| 37 | 25 | % |
| 38 | 26 | & |
| 39 | 27 | ‘ |
| 40 | 28 | ( |
| 41 | 29 | ) |
| 42 | 2A | * |
| 43 | 2B | + |
| 44 | 2C | , |
| 45 | 2D | - |
| 46 | 2E | . |
| 47 | 2F | / |
| 48 | 30 | 0 |
| 49 | 31 | 1 |
| 50 | 32 | 2 |
| 51 | 33 | 3 |
| 52 | 34 | 4 |
| 53 | 35 | 5 |
| 54 | 36 | 6 |
| 55 | 37 | 7 |
| 56 | 38 | 8 |
| 57 | 39 | 9 |
| 58 | 3A | : |
| 59 | 3B | ; |
| 60 | 3C | < |
| 61 | 3D | = |
| 62 | 3E | > |
| 63 | 3F | ? |
| 64 | 40 | @ |
| 65 | 41 | A |
| 66 | 42 | B |
| 67 | 43 | C |
| 68 | 44 | D |
| 69 | 45 | E |
| 70 | 46 | F |
| 71 | 47 | G |
| 72 | 48 | H |
| 73 | 49 | I |
| 74 | 4A | J |
| 75 | 4B | K |
| 76 | 4C | L |
| 77 | 4D | M |
| 78 | 4E | N |
| 79 | 4F | O |
| 80 | 50 | P |
| 81 | 51 | Q |
| 82 | 52 | R |
| 83 | 53 | S |
| 84 | 54 | T |
| 85 | 55 | U |
| 86 | 56 | V |
| 87 | 57 | W |
| 88 | 58 | X |
| 89 | 59 | Y |
| 90 | 5A | Z |
| 91 | 5B | [ |
| 92 | 5C | |
| 93 | 5D | ] |
| 94 | 5E | ^ |
| 95 | 5F | _ |
| 96 | 60 | ` |
| 97 | 61 | a |
| 98 | 62 | b |
| 99 | 63 | c |
| 100 | 64 | d |
| 101 | 65 | e |
| 102 | 66 | f |
| 103 | 67 | g |
| 104 | 68 | h |
| 105 | 69 | i |
| 106 | 6A | j |
| 107 | 6B | k |
| 108 | 6C | l |
| 109 | 6D | m |
| 110 | 6E | n |
| 111 | 6F | o |
| 112 | 70 | p |
| 113 | 71 | q |
| 114 | 72 | r |
| 115 | 73 | s |
| 116 | 74 | t |
| 117 | 75 | u |
| 118 | 76 | v |
| 119 | 77 | w |
| 120 | 78 | x |
| 121 | 79 | y |
| 122 | 7A | z |
| 123 | 7B | { |
| 124 | 7C | 丨 |
| 125 | 7D | } |
| 126 | 7E | ~ |
| 127 | 7F |