1、去掉第三世第十三世之类的前缀:
^(第)(\w{1,})(世)($|\W|\s)
2、去掉行首名字加公的“公”字
^(\w)(公,)
3、去掉某某公之子的“公”字
(\W\w.?)(公)(\w子\W)
替换为:\1\3
4、把“名字+字什么号什么+某某之子”调为“名字+某之子”的顺序
查找:(abc\w.*\W)(\w.*\W)(\w.?公\w子)(\W)
替换为:\1\3,\2
5、去掉“名字+,+见后”
^(\w{1,}\,)(见后)
6、替换适前后斜杠正则表达式
(/)(\w{0,})(适)(\w{0,})(/)
\2\3\4
7、删掉见后无用记录行
^(\w{1,})(,)(见后)(\W|)
8、删除空行
^(\s*)\r\n
9、提取某某子放名字后
^(\w{1,2}\W)(\w.*)(\W)(\w{1,3}子,)
\1\4\2\3
文本内容为:
境界面(BOUNT)
兴趣面(POINT)
兴趣点(POIPT)
交通线(TRALK)
其中“境界面”、“兴趣面”等中文部分为图层名称,BOUNT、POINT等英文部分为图层别名。
希望通过替换后的文本内容为:
*BOUNT,境界面,面
*POINT,兴趣面,面
*POIPT,兴趣点,点
*TRALK,交通线,线
即,将原来的“中文名(英文名)”的格式修改为“*英文名,中文名,图层类型”的格式,且图层类型来源为中文图层名的最后一个字。
使用的正则表达式为:
^(.+?)([点线面]{1})(([A-Z]+))
分组打包:
第一组:^(.+?)
第二组:([点线面]{1})
第三组:(([A-Z]+))
表达式说明:
“^”匹配输入字符串的开始位置,即本例中的一整行文本;
第一个括号中的内容“.+?”匹配除换行符“\n”之外的任意一个字符,如本例中的“境”部分;
第二个括号中的内容匹配的是在“点、线、面”集合中的一个字符,如本例中的“面”;
第三个括号中的内容匹配的是大写的A-Z字符部分。
被替换为:
\3,\1\2,\2
说明:$后跟序号N(如:$3),表示取到结果集中的第N条记录。其中第0条记录为完整的结果本身,第1条起为表达式括号中的内容。
调整组序:
\3 公式得到的第三组内容调整到最前
\1\2 公式得到的第一组内容和第二组内容其后
\2 公式得到的第二组内容在最后
注意:\3,和\2, 后边的标点符号是在原文后加逗号。而原文中的()没有保留。
等价是等同于的意思,表示同样的功能,用不同符号来书写。
?,*,+,\d,\w 都是等价字符
?等价于匹配长度{0,1}
*等价于匹配长度{0,}?
+等价于匹配长度{1,}
\d等价于[0-9]
\D等价于[^0-9]
\w等价于[A-Za-z_0-9]
\W等价于[^A-Za-z_0-9]。
常用运算符与表达式:
^ 开始
() 域段
[] 包含,默认是一个字符长度
[^] 不包含,默认是一个字符长度
{n,m} 匹配长度?
. 任何单个字符(\. 字符点)
| 或
\ 转义
$ 结尾
[A-Z] 26个大写字母
[a-z] 26个小写字母
[0-9] 0至9数字
我的手机 2018-02-07 16:29:13
常用运算符与表达式:
^ 开始
() 域段
[] 包含,默认是一个字符长度
[^] 不包含,默认是一个字符长度
{n,m} 匹配长度?
. 任何单个字符(\. 字符点)
| 或
\ 转义
$ 结尾
[A-Z] 26个大写字母
[a-z] 26个小写字母
[0-9] 0至9数字
[A-Za-z0-9] 26个大写字母、26个小写字母和0至9数字
, 分割
.
分割语法:
[A,H,T,W] 包含A或H或T或W字母
[a,h,t,w] 包含a或h或t或w字母
[0,3,6,8] 包含0或3或6或8数字
语法与释义:
基础语法 "^([]{})([]{})([]{})$"
正则字符串 = "开始([包含内容]{长度})([包含内容]{长度})([包含内容]{长度})结束"?
?,*,+,\d,\w 这些都是简写的,完全可以用[]和{}代替,在(?(?=)(?!)(?<=)(?<!)(?i)(*?)(+?)这种特殊组合情况下除外。
初学者可以忽略?,*,+,\d,\w一些简写标示符,学会了基础使用再按表自己去等价替换
实例:
字符串;tel:086-0666-88810009999
原始正则:"^tel:[0-9]{1,3}-[0][0-9]{2,3}-[0-9]{8,11}$"?
速记理解:开始 "tel:普通文本"[0-9数字]{1至3位}"-普通文本"[0数字][0-9数字]{2至3位}"-普通文本"[0-9数字]{8至11位} 结束"
等价简写后正则写法:"^tel:\d{1,3}-[0]\d{2,3}-\d{8,11}$" ,简写语法不是所有语言都支持。
应用实例
【1】正则表达式应用——替换指定内容到行尾
原始文本如下面两行
abc aaaaa
123 abc 444
希望每次遇到“abc”,则替换“abc”以及其后到行尾的内容为“abc efg”
即上面的文本最终替换为:
abc efg
123 abc efg
解决:
① 在替换对话框,查找内容里输入“abc.*”,替换内容输入为“abc efg”
② 同时勾选“正则表达式”复选框,然后点击“全部替换”按钮
其中,符号的含义如下:
“.” =匹配任意字符
“*” =匹配0次或更多
注意:其实就是正则表达式替换,这里只是把一些曾经提出的问题加以整理,单纯从正则表达式本身来说,就可以引申出成千上万种特例。
正则表达式中的转义字符:通过“\”作为前缀:
\o NUL字符(\u0000)
\t 制表符(\u0009)
\n 换行符(\u000A)
\v 垂直制表符(\u000B)
\f 换页符(\u000C)
\r 回车符(\u000D)
\xnn 由十六进制数nn指定的拉丁字符
\uxxxx 由十六进制xxxx指定的Unicode字符
\cX 控制字符^X
实例:
function zyzf() {
var text = "zy\t\rzf";
var reg = new RegExp("\\r", "g");
alert(reg.test(text));
}
<input id="Button9" type="button" value="转义字符匹配" onclick="zyzf()" />
正则表达式中特殊标点符号:^ $ . * + ?= ! : | \ / ( ) [ ] { }(如果要在正则表达式使用这些直接量则要在前面加“\”)
[^]:否定字符类,不包括在后面的匹配。
function tsbds() {
var text = "tieshubiaodianpipei";
var reg = new RegExp("^ti", "g");
alert(reg.exec(text));
}
$:以什么的结尾。
. :除了换行符和unicode行终止符之外的所有字符。
[]:方括号里面的任意字符匹配。
例如:
var reg=new RegExp("[abc]","g");的含义和“a”“b”“c”中的任何一个匹配。
正则表达式中的字符类
\w :任何ASCII字符组成的字母数字,等级于[a-zA-Z0-9]
\W:任何不是ASCII字符组成的字母数字,等级于[^a-zA-Z0-9]
\s :任何Unicode的空白字符
\S: 任何非Unicode的空白字符
\d: 任何ASCII数字,等价于[0-9]
\D:出ASCII数字之外的任何字符,等价于[^0-9]
[\b]:退格直接量(特例)
实例:寻找字符串中的所以数字
function tsbds() {
var text = "ties2hubi3aodia2424npip242ei";
var reg = new RegExp("\\d", "g");
alert(text.match(reg));
}
<input id="Button10" type="button" value="特殊标点匹配" onclick="tsbds()" />
正则表达式中重复用法:
{n,m} 匹配前一项至少n次,但是不超过m次
{n,} 匹配前一项n次或者更多次
{n} 匹配前一项n次
? 匹配前一项0次或者1次,等价于{0,1}
+ 匹配前一项一次或者多次,等价于{1,}
* 匹配前一项0次或者多次,等价于{0,}
实例:找出数字组合
function tsbds() {
var text = "ties2hubi3aodia2424npip242ei";
var reg = new RegExp("\\d+", "g");
alert(text.match(reg));
}
<input id="Button10" type="button" value="特殊标点匹配" onclick="tsbds()" />
正则表达式匹配之非贪婪的匹配,只需要在待匹配的字符后面跟一个问号即可。
如我们看看/a+?/的匹配结果吧。
function tsbds() { var text = "tieaaaas2hubi3aodia2424npip242ei"; var reg = new RegExp("a+?", "g"); alert(text.match(reg)); }
<input id="Button10" type="button" value="特殊标点匹配" onclick="tsbds()" />
正则表达式之分组、选择和引用
| 分割供选择的字符,如/ab|cd|ef/可以匹配“ab”或“cd”或者“ef”(从左到右的匹配,左边匹配了就忽略右边的如/a|ab/遇到ab职匹配第一个)
() 将几个项组合成一个单元。
例如:
function tsbds() {
var text = "tiABCeaaaaSs2hubAi3aDodAia2424npBip24C2ei";
var reg = new RegExp("ab|bc|de", "gi");
alert(text.match(reg));
}
<input id="Button10" type="button" value="特殊标点匹配" onclick="tsbds()" />
正则表达式的修饰符
i :执行不区分大小写的匹配
g :找到所有的匹配
m :多行匹配模式
实例匹配所有的全局配置字母abc(不区分大小写)
function tsbds() {
var text = "tiABCeaaaaSs2hubAi3aDodAia2424npBip24C2ei";
var reg = new RegExp("[abc]", "gi");
alert(text.match(reg));
}
<input id="Button10" type="button" value="特殊标点匹配" onclick="tsbds()" />
|