📄 00000005.htm
字号:
合於 Regexp ``[Tt]he''的字串如下(粗体字标示) <BR> ``One is red, and the other is white.'' <BR> 合於 Regexp ``\<[Tt]he\>''却仅有(粗体字标示) <BR> ``One is red, and the other is white.'' <BR> 因同时使用`` \<''及`` \>'' 限制合於 Regexp ``[Tt]he''的字串, 必须 <BR> 紧接於字首及字尾之间; 故 ``other''中的子字串 ``the''并不合於这个 <BR> Regular Expression. <BR> o [注 :] \<, \> 这二个特殊字元, 并不是很通用. 请参考 Appendix A 中的 <BR> 附表. <BR> o \( ... )\ 於 Regular Expression 中使用 `` \(''``{ \)}''来括住一部 <BR> 分的 Regular Expression; 其後可用 `` \1'''来表示第一次被`` \('' `` <BR> \)'' 括住的部份. 若 Regular Expression 中使用了数次`` \('' `` \)'' <BR> 来括住不同的部分, 则依次使用 ``\1'', `` \2'', `` \3'' ,...(最多可 <BR> 用到 `` \9'')来 表示之前括住的 Regular Expression. 其用法如下 : <BR> <BR> o [用法一.] <BR> + 例如: 欲表示像``aa'',``bb'',``cc'',...``zz'' 等字串. <BR> 使用 Regexp ``[a-z]''则表示任一个小写的英文字母. <BR> 使用 Regexp ``[a-z][a-z]''则表示二个任意的小写英文字母. 它除 <BR> 表示 ``aa'',``bb'',``cc'',...``zz''等字串外, 也可表示``ab'', <BR> ``ac'',``ad'',...等字串(这不是题意所要求的字串). <BR> 这时可以`` \('' `` \)'' 来括住第一个 `` [a-z]'' (Regular <BR> Expression 解译的程式, 会暂时记录实际找寻 到的英文字母). 之 <BR> 後, 便可以 Regexp ``\1'' 来指定适才被记 录下的英文字母即为所 <BR> 要找寻字串的第二个字元. 故正确的表示法如下 : <BR> <BR> Regexp ``\([a-z]\)\1'' <BR> + 例如 : 欲表示像 ``789w987'', ``abcwcba'', ``theweht'',....等 <BR> 具对称性 的字串.(该字串的特徵是 ``w''之前後三个字元相互对称) <BR> 该类字串的表示法如 下 : <BR> <BR> Regexp ``\(.\)\(.\)\(.\)w\3\2\1" Regexp中``.''表示任意一个 <BR> 字元. 因字元``w''之前出现的三个字元并无 任何限制, 故可用 `` <BR> ...''表之. 但每个`` .''分别用 `` \('',`` \)'' 括住, 之後便可 <BR> 使用 `` \1'', `` \2'', `` \3'' 分别代表将来实际匹配到的前三个 <BR> 字元. <BR> <BR> o 用法二. 进行字串找寻并置换(Replace)时, 若将被置入的新字串不是一个 <BR> 固定的字串, 与被找到的原字串有关时(见下例说明). 此时, 可先以 \( \) <BR> 来括住一部分的Regular Expression; 再於将被新置入的字串中使用`` <BR> \1'', `` \2'',... 来表示当时被找到的字串(或其子字串). <BR> + 例 : 欲找出档案中具有 ``prog12.c'', ``prog9.c'', <BR> ``prog832.c'',... 等式样的字串, 并将其置换成(以上列三个字串为 <BR> 例) ``[note 12]'', ``[note 9]'', ``[note 832]''. 在这例子 <BR> 中, 因事先不知道所找寻到的字串(prog数字.c)中的 数字 为何, 故 <BR> 无法事先决定应换成什麽新字串. 合於本例所要找寻的字串其 <BR> Regular Expression 为 : <BR> Regexp ``prog[0-9][0-9]*\.c'' 上式中 ``[0-9][0-9]*'' 表一位 <BR> 或一位以上的阿拉伯数字, 因 执行前并不知道该部分实际会匹配什麽 <BR> 数值, 故找到的字串将来应置换 成什麽, 事前无法指定. 这情况, 也 <BR> 可用`` \('',`` \)'' 来括住 ``[0-9][0-9]* '', 在置换的新字串 <BR> 中再以 \1 表示找寻时实际匹配到的数字. <BR> <BR> 读者可编辑一资料档, 再以sed执行下列命令, 观察其执行结果. <BR> <BR> $sed -e 's/ prog\([0-9][0-9]*\)\.c/[ note \1]/g' 资料档名 <BR> <BR> o \{ 数字, 数字\} 一种於 Regular Expression 中形容其前的字元或字元 <BR> 集合出现次数的表示法. 其型态与用法如下 : <BR> <BR> o \{下限数字, 上限数字\} <BR> 例如 : Regexp "[0-9]\{2,4\}"用以表示2到4位的阿拉伯数字. <BR> o { 数字} <BR> 例如 : Regexp ``ax\{99\}'' 用以表示一个 ``a'' 之後接上99个 ``x'' <BR> 所组成的字串. <BR> o \{下限数字, \} 例如 : Regexp ``ax\{2,\}'' 用以表示一个 ``a'' 之後 <BR> 接上2个或更多的 ``x''所组成的字串. <BR> <BR> * [+] 形容其前的字元或字元集合出现一次或一次以上(注三). <BR> 例如 : Regexp ``[0-9]+'' 用以表示一位或一位以上的数字. <BR> <BR> * [?] 形容其前的字元或字元集合可出现一次或不出现(注三). <BR> o [例如 :] Regexp ``[+-]?[0-9]+'' 表示数字(一位以上)之前可出现一个正 <BR> 负号 或不出现正负号. <BR> <BR> * [(...)] 用以括住一群字元,且将之视成一个group(见下面说明)(注三) <BR> o 例如 : <BR> Regexp ``12+'' 表示字串 "12","122","1222","12222",... <BR> Regexp ``(12)+'' 表示字串 "12","1212","1212","1212".... <BR> 上式中字串 ``12''以( )括住,整个视为一个group, 故被重覆符号``+'' 所形容 <BR> 的是``12''而非 ``2'', 重复出现的也是 ``12''. <BR> <BR> * [|] 表示逻辑上的 "or" (注三) <BR> o 例如 : Regexp ``Oranges?|apples?|water'' 可用以表示字串 <BR> ``Orange'', ``Oranges'' <BR> 或 ``apple'', ``apples'' <BR> 或 ``water'' <BR> o 注三 : 上列 + , ?, (...), | 等用法, 为 Extended Regular Expression <BR> 中新增列的用法. awk 及 egrep 中所使用的 Regular Expression 即为 <BR> Extended Regular Expression. 但 vi, sed, grep,...等软体中并无这些 <BR> 用法. <BR> <BR> * [&] ``&''并非 Regular Expression 中的特殊字元. 但以 Regular Expression 进 <BR> 行字串找寻置换(Replace)时, 常会用到 ``\&''. \ 在许多 Unix tool 中, 当 <BR> ``\&''出现在『将被置入的新字串』时, 它用以表示 ``实际被找到合於所指定的 <BR> Regular Expression 的字串'' (见下例说明) <BR> o 例如 : 找出档案中所有合乎 Regexp ``a[0-9]*\.c'' 的字串, 并在其前後 <BR> 加上小 括号.依题意要求, 档案中所有如 ``a12.c'', ``a932.c'', <BR> ``a45.c'' ,...等字串都应置换为 ``(a12.c)'', ``(a932.c)'', <BR> ``(a45.c)'',.. . . 遇到这情况,可令『将被置入的新字串』为 `` (&)'' <BR> 此时, ``&''便是用来表示实际上被找到合於 Regexp ``a[0-9]*\.c'' 的字 <BR> 串. <BR> 下列是使用 UNIX 上不同的工具, 来处理本例要求的字串置换. <BR> <BR> o vi 以 vi 编辑该档案,并在 vi 命令输入模式下输入 <BR> : s/a[0-9]*\.c/(&)/g <BR> o sed 执行如下命令 ( $ 表 Shell 命令列的提示符号 ) <BR> $ sed -e 's/a[0-9]*\.c/ (&)/g' 资料档名称 <BR> o awk 执行如下命令 ( $ 表 Shell 命令列的提示符号 ) <BR> $ awk '{ gsub(/a[0-9]*\.c/, "(&)"); print }' 资料档名称 <BR> <BR>---------------------------------------------------------------------------- <BR> <BR>Note 2: <BR> 上列字元在 Regular Expression 中代表特殊意义, 称之为 特殊字元. 但 Unix <BR> 中不同的指令对 Regular Expression 的解释能力不尽相同, 故对特殊字元也有 <BR> 不同的认定. 请参考尾页附表. <BR> <BR><CENTER><H1>BBS水木清华站∶精华区</H1></CENTER></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -