博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ksh 正则表达式
阅读量:4050 次
发布时间:2019-05-25

本文共 2961 字,大约阅读时间需要 9 分钟。

-- Start

如果你还不知道什么是正则表达式或者不是很清楚,请先阅读

ksh 的正则表达式和其他语言有一些区别,最重要的区别是,在 ksh 中, ? 代表任意一个字符,* 代表任意多个字符,那么它如何匹配次数呢?看看下面的表格吧。

操作符	            描述*(exp)              贪婪匹配,匹配任意次+(exp)              贪婪匹配,匹配 1次或多次?(exp)              贪婪匹配,匹配 0或1次{N}(exp)            贪婪匹配,匹配 N 次{N,M}(exp)          贪婪匹配,匹配 N 到 M 次@(exp1|exp2|...)    贪婪匹配,匹配 exp1 或 exp2 ...*-(exp)             非贪婪匹配,匹配任意次+-(exp)             非贪婪匹配,匹配 1次或多次?-(exp)             非贪婪匹配,匹配 0或1次{N}-(exp)           非贪婪匹配,匹配 N 次{N,M}-(exp)         非贪婪匹配,匹配 N 到 M 次@-(exp1|exp2|...)	非贪婪匹配,匹配 exp1 或 exp2 ...!(exp)              匹配非 exp 的任何东西[:word:]            匹配字母或下划线\d                  匹配数字,同[[:digit:]]\D                  匹配非数字,同[![:digit:]]\s                  匹配空白字符,同[[:space:]]\S                  匹配非空白字符,同[![:space:]]\w                  匹配匹配字母或下划线,同[[:word:]]\W                  匹配非匹配字母或下划线,同[![:word:]]
下面是使用正则表达式的一个简单例子。

#!/bin/ksh  ################################ 匹配typeset brithday='2013-06-25';if [[ ${brithday} = {4}(\d)-{2}(\d)-{2}(\d) ]]; then      print "legal date"  fi  ################################ 替换typeset str="Zhang yi, zhang er, Zhuang Si, ZHANG WU";  # ${xx/pattern/replace} pattern 是个正则表达式,将变量 xx 中 pattern 匹配的字串替换成 replace 指定的字符串,非贪婪模式 print "\${xx/pattern/replace} : ${str/Z*(\w)/C\1}";# ${xx//pattern/replace} 同上,贪婪模式 print "\${xx//pattern/replace} : ${str//Z*(\w)/C\1}";# ~(+i:pattern) 表示 pattern使用忽略大小写匹配模式print "\${xx//pattern/replace} : ${str//~(+i:Z*(\w))/C\1}";# ksh 不支持 行首,行尾,单词边界 正则表达式,下面的方式实现了类似功能# ${xx/#pattern/replace} pattern 是个正则表达式,从变量 xx 开头查找 pattern 匹配的字串替,如果找到则换成 replace 指定的字符串,非贪婪模式print "\${xx/#pattern/replace} : ${str/#Z*(\w)/C\1}";# ${xx/%pattern/replace} pattern 是个正则表达式,查找变量 xx 是否以 pattern 匹配的字串替结尾,如果找到则换成 replace 指定的字符串,非贪婪模式print "\${xx/%pattern/replace} : ${str/%?(\w)/*}";################################  删除子串# ${xx/pattern} pattern 是个正则表达式,删除变量 xx 中 pattern 匹配的子串,非贪婪模式 print "\${xx/pattern} : ${str/Z*(\w)}";# ksh 不支持 行首,行尾,单词边界 正则表达式,下面的方式实现了类似功能# ${xx#pattern} pattern 是个正则表达式,从变量 xx 开头查找 pattern 匹配的字串替,如果找到则删除,非贪婪模式print "\${xx#pattern} : ${str#Z*(\w)}";# ${xx##pattern} 同上,贪婪模式print "\${xx##pattern} : ${str##Z*(\w)}";# ${xx%pattern} pattern 是个正则表达式,查找变量 xx 是否以 pattern 匹配的字串替结尾,如果找到则删除,非贪婪模式print "\${xx%pattern} : ${str%W*(\w)}";# ${xx%%pattern} 同上,贪婪模式print "\${xx%%pattern} : ${str%%W*(\w)}";

上面介绍的正则表达式有个缺陷,它只能匹配英语,如果你想匹配其他语言,你可以使用标准的 POSIX 语法,如下。

元字符(Metacharacter)	匹配(Matches)[[:alnum:]]	            字母和数字[[:alpha:]]	            字母[[:lower:]]	            小写字母[[:upper:]]	            大写字母[[:digit:]]	            数字[[:blank:]]	            空格和制表符[[:space:]]	            空白字符[[:graph:]]	            非空白字符[[:print:]]	            类似[[:graph:]],但是包含空白字符[[:punct:]]	            标点符号[[:cntrl:]]	            控制字符[[:xdigit:]]	        十六进制中容许出现的数字(例如 0-9a-fA-f)[. xx .]                将 xx 作为一个整体匹配, xx 可以是任何字母[= e =]                 认为等价,在法语中匹配 e, è, 或 é

-- 更多参见:

-- 声 明:转载请注明出处

-- Last Updated on 2015-10-10

-- Written by ShangBo on 2015-09-25
-- End

你可能感兴趣的文章
nodejs Stream使用中的陷阱
查看>>
MongoDB 数据文件备份与恢复
查看>>
数据库索引介绍及使用
查看>>
MongoDB数据库插入、更新和删除操作详解
查看>>
MongoDB文档(Document)全局唯一ID的设计思路
查看>>
mongoDB简介
查看>>
Redis持久化存储(AOF与RDB两种模式)
查看>>
memcached工作原理与优化建议
查看>>
Redis与Memcached的区别
查看>>
redis sharding方案
查看>>
程序员最核心的竞争力是什么?
查看>>
Node.js机制及原理理解初步
查看>>
linux CPU个数查看
查看>>
分布式应用开发相关的面试题收集
查看>>
简单理解Socket及TCP/IP、Http、Socket的区别
查看>>
利用HTTP Cache来优化网站
查看>>
利用负载均衡优化和加速HTTP应用
查看>>
消息队列设计精要
查看>>
分布式缓存负载均衡负载均衡的缓存处理:虚拟节点对一致性hash的改进
查看>>
分布式存储系统设计(1)—— 系统架构
查看>>