1。*,+,?为量词,默认与尽可能多的字符进行匹配。后面加?,变为非贪婪,从而与尽可能短的字符进行匹配。+和{3,7}为贪婪量词。+?和{3,7}?为非贪婪量词。注意,贪婪和非贪婪不能混用,否则会引起歧义。
2.逆向引用,是在\后面跟一个前面的子表达式的编号
比如匹配the the
\m(\w+)\M\s+\m\1\M
3.非捕获子表达式
4.regexp {(0-9]+) *([a-z]+)} "walk 10 km" a b c
第一个参数插入与整个正则表达式匹配的子字符串
第二个参数插入与捕获到的第一个字表达式想匹配的子字符串
第三个参数插入与捕获到的下一个字表达式想匹配的子字符串,以此类推
a:10 km b:10 c:km
regexp 还可以指定其他选项,-start 选项,在后面跟一个字符串的字符索引,指定regexp从该位置开始查找匹配。
-all选项告诉regexp在字符串中查找尽量多次的匹配,并返回总的匹配次数。
-nocase 指定模式中的字母在字符串中查找匹配是不区分大小写。
-indice选项致命二外的变量不应该用于存放匹配的子字符串的值,而是存放给出子字符串范围的首字符的索引列表。执行下面的命令house,a的值为5 9,b为5 6 ,c为 8 9
regexp -indice {([0-9]+) *([a-z]+)} "walk 10 km" a b c
-inline 选项让regexp把匹配变量返回为一个数据列表,
regexp {(【0-9】+) *(【a-z]+)} “walk 10 km"
=> {10 km} 10 km
-line 选项激活区分换行的匹配,指定这个选项后,[^括号表达式和绝不会与新行匹配,^原子除了他的普通功能外,域新行后的空字符串匹配。$原子除了他的普通功能外,与新行前的空字符串匹配
regexp -all -line -- {^[[:blank:]]*ERROR} $text
返回所有以ERROR字符串开头的行数
--明确标志选项结束。
4.regsub 用于替换
regsub there ”They live there lives" their x
=> 1
regsub的第一个参数是正则表达式模式第二个参数是输入的字符串,regsub返回1代表字符串与模式匹配,返回0代表不匹配。第三个参数为替换字符串
最后一个参数存放替换后的新字符串
x为They live their lives,返回值为1
-all 替换所有匹配字符
regsub -all a ababa zz x
=> x:zzbzzbzz
-nocase不区分大小写
-start指定字符串中一个字符的索引,从指定字符处开始查找匹配
-line 启动区分换行的匹配
如果替换字符串中包含&或\0,其中的&或\0会被途欢为域正则表达式相匹配的子字符串,如果是\n形式的序列出现在途欢字符串中,n为十进制数,与第n个捕获的子表达式相匹配的子字符串会替换掉这个\n
regsub -all -- a|b axaab && x
将字符串中所有的a和b都写两遍
=》aaxaaaabb
regsub -all -- (a+)(ba*) aabaabxab {z\2} x
=>zbaabxzb