本页主题: 正则表达在一般文本编辑软件中的应用 打印 | 加为IE收藏 | 复制链接 | 收藏主题 | 上一主题 | 下一主题

galilette
级别: 嘉宾


精华: 30
发帖: 2139
威望: 1382 点
金钱: 0 静电币
支持度: 0 点
在线时间:3012(小时)
注册时间:2002-05-01
最后登录:2019-03-12

 正则表达在一般文本编辑软件中的应用

很多文本编辑器, 比如UltraEdit, EditPlus, EmEditor等, 都支持比较基本的正则表达 (Regular Expression). 使用正则表达能方便地查找符合一定模式的字符串, 并能进行灵活的替换. 熟练运用正则表达能极大提高某些文本操作的效率. 本贴以UltraEdit支持正则表达为例, 对基本的正则表达做出说明. 需要说明的是, UltraEdit既有自己的正则表达语法, 同时支持Unix型语法. 不失一般性, 下文介绍其Unix型语法, 在UE中, 需要到Advanced-->Configuration-->Find中, 选中Unix Style Regular Expression.

水平所限, 如有错误, 还请斧正. 欢迎转载, 转载请注明出处.


格式说明:
红色表示一个正则表达, 其中的粗体表示特殊含义字符


*特殊字符:
特殊字符是具有特殊含义的字符. 列表如下:

    [*]\
    转意字符, 转换下一个字符的含义.详见 *转意字符.
    [*]
    ^
    表征行首, 即表示后继字符必须为行首字符

    比如^http表示行首的http
    [*]$
    表示行尾, 即表示先行字符为行尾字符

    比如\.com$表示行尾的.com
    [*]*
    无或者重复, 表示该位置或者无内容(null), 或者为先行字符的多次重复
    +
    [*]重复, 表示该位置为先行字符的多次重复

    比如te*st可以是test, teest, teeest, 但te+st不能是test
    [*].
    非新行单字符, 表示任意非新行的单个字符(一个tab, 一个空格, 一个数字, 一个字母, etc.)
    [*]
    |
    逻辑或, a|b表示该位置为a或者为b

    比如Jon|ke表示Jone或Joke, Z.e|+可以表示Zoe, 也可以表示Zoo, 但不是Zooo, ...


*块(Block):

    [*](expression)
    标记块, 括号内为标记内容. 标记块既影响验证顺序, 也可以用来标记表达式中的部分内容. 在"替换"命令中, 标记过的块可以依次用
    \1, \2,...来表示, (在editplus中, 整个符合正则表示的串则可以用\0来表示.) 正则表达中最多可以标记9个块.
    比如:
    Quote:

    查找(john|smith), 则john或smith都符合条件, 而如果查找john|smith, 则只有johnmith或者johsmith符合条件
    查找(h.*o) (f.*s), 如果找到"hello folks", 则\2 \1可以将它替换为"folks hello"

    [*][xyz]
    单字符集, 方括号内为字符集的成员. 单字符集块表示该位置为一个该集中的字符
    备注: 单字符集中的特殊字符:
    Quote:

    -, ^, ]\外, 所有(特殊)字符在[]内都表示常意:
    * 单个出现的
    -表示其常意(即字符"-"), 而x-y形式则表示ascii码在ascii(x)和ascii(y)之间(inclusive)的字符.
    *
    ^表示后继的所有字符为取非, 即比如[a-z^b]表示除b外所有小写字母
    * 转意符仍旧有效, 如
    [\t\n]表示该字符为tab或换行
    *
    \\, \], \^, \-分别表示\, ], ^, -

    比如:
    Quote:

    [0-9a-z]表示任意数字或字母,
    [a-z^e-h]表示非efgh的小写字母,
    [^\^\]]表示非^和]的任意字符(包括空白,换行等)
    [(-*]表示(, )或* (ascii码分别为40, 41, 42)



*转意字符"\":
转意字符(Escape character)\的作用是转换(toggle)后续第一个字符的含意:
1. 常用的标识符

    [*]
    \d
    表示一个数位字符, 等价与[0-9].
    [*]
    \D
    表示一个非数位字符, 等价与[^0-9].
    [*]
    \f
    表示一个form-feed字符(unix).
    [*]
    \n
    表示一个linefeed字符(新行符).
    [*]
    \r
    表示一个carriage return字符(复位符).
    [*]
    \s
    表示任意一个非换行符的white space (空白字符), 包括空格, tab, form-feed等.
    [*]
    \S
    表示一个非换行符的non-white space (非空白字符).
    [*]
    \t
    表示一个tab.
    [*]
    \v
    表示一个纵向tab (unix).
    [*]
    \w
    表示任意一个显示字符, 包括下划线 (数字, 字母, 特殊符号等, 但不包括white space).
    [*]
    \W
    表示任意一个非显示字符(non-word character).

2. 如果下一个字符在语境中本身具有特殊含意, 转意字符取消它的特殊含意
比如:
Quote:

.原先代表任意字符, ][]块中表示块终止,而\.代表常意的点号, [\]]表示]
Posted: 2004-03-15 14:51 | [楼 主]
紫雨
级别: 嘉宾


精华: 5
发帖: 172
威望: 367 点
金钱: 1003 静电币
支持度: 482 点
在线时间:45(小时)
注册时间:2003-04-16
最后登录:2007-03-06

 

呵呵,这个其实很实用,不过大多可能看不懂
Posted: 2004-03-16 22:28 | 1 楼
jimgreen2002
级别: 新手上路


精华: 0
发帖: 18
威望: 46 点
金钱: 966 静电币
支持度: 0 点
在线时间:0(小时)
注册时间:2002-08-27
最后登录:2017-11-15

 

其实我还是喜欢用js的正则表达式处理文本。
只要一个html就ok了,方便
Posted: 2004-03-17 20:10 | 2 楼
cancelpj
好帅好帅滴碟仙~
级别: 贵宾


精华: 3
发帖: 442
威望: 360 点
金钱: 5401 静电币
支持度: 4 点
在线时间:36(小时)
注册时间:2002-11-25
最后登录:2008-07-24

 

精彩!
Posted: 2004-03-17 22:35 | 3 楼
小神
我不要头衔
级别: 贵宾


精华: 14
发帖: 15287
威望: 2803 点
金钱: 6689 静电币
支持度: 4413 点
在线时间:348(小时)
注册时间:2002-08-29
最后登录:2008-03-14

 

真神奇
Posted: 2004-03-19 11:03 | 4 楼
qpfei
级别: 新手上路


精华: 0
发帖: 27
威望: 0 点
金钱: 74 静电币
支持度: 0 点
在线时间:0(小时)
注册时间:2004-03-08
最后登录:2004-04-01

 

这个贴子收下了~~多谢楼主。
Posted: 2004-03-20 22:43 | 5 楼
freebeme
级别: 光明使者


精华: 3
发帖: 2079
威望: 270 点
金钱: 2285 静电币
支持度: 0 点
在线时间:47(小时)
注册时间:2002-08-31
最后登录:2015-03-23

 

[QUOTE]最初由 小神 发布
[B]真神奇 [/B][/QUOTE]/:L
不 小   的   神 奇
Posted: 2004-03-21 11:09 | 6 楼
唐僧
活佛
级别: 光明使者


精华: 23
发帖: 2845
威望: 625 点
金钱: 10 静电币
支持度: 0 点
在线时间:317(小时)
注册时间:2002-11-16
最后登录:2024-09-21

 

再顶一下,呵呵,老能用得上
Posted: 2004-08-12 10:27 | 7 楼
bbsbird
轻尘
级别: 贵宾


精华: 3
发帖: 3038
威望: 836 点
金钱: 3075 静电币
支持度: 11 点
在线时间:176(小时)
注册时间:2003-10-16
最后登录:2012-07-23

 

反正也顶了 也不差我这一下

也难为大头狗花了不少力气编辑该帖子了 HOHO
深夜来临的时候,是一个人心灵最脆弱的时候,也是思念最疯狂的时候。其实一个人并不孤单,想念一个人的时候才是真正的孤单。
Posted: 2004-08-12 10:32 | 8 楼
galilette
级别: 嘉宾


精华: 30
发帖: 2139
威望: 1382 点
金钱: 0 静电币
支持度: 0 点
在线时间:3012(小时)
注册时间:2002-05-01
最后登录:2019-03-12

 

嗯..嘿嘿, 当时也是刚刚接触做了个像笔记一样的东西.

最近在看sed & awk, 基本上也是regexpr的应用. 现在看来当时没有区分`基本的正则表达'和`扩展的正则表达' (basic regular expression, or BRE vs. extended regular expression, or ERE), 但很多软件只支持BRE, 或者需要用转义来支持ERE中的扩展 (比如grep和sed), 有些则默认是ERE的(比如egrep和awk). 当时也没有区分搜索和替代字符串中特殊字符集的不同, 比如在搜索字符串中[]都有特殊含义, 但到了替代字符串中, []就失去这种含义了(因为没有必要^^). 这只能怪UltraEdit的正则表达不够`标准'了^^

而且perl好象还有自己定义的拓展, 所以也有必要强调一下posix标准

等有空的时候想写一个sed & awk的笔记, 先卖个关子
Posted: 2004-08-12 11:06 | 9 楼
st0n3
级别: 嘉宾


精华: 4
发帖: 1870
威望: 909 点
金钱: 10 静电币
支持度: 52 点
在线时间:315(小时)
注册时间:2002-08-24
最后登录:2024-07-15

 

非常不错,开发用的着的,比如php,嘻嘻!
wh3n a 1itt1e b0y fa11  in l0v3 with a 10v31y 1ady...
Posted: 2004-08-12 11:57 | 10 楼
帖子浏览记录 版块浏览记录
狗狗静电BBS - wwW.DoGGiEhoMe.CoM » 电脑全方位 Computer Guide

沪ICP备05008186号
Powered by PHPWind Styled by MagiColor