正则表达式

正则表达式
通用正则表达式
元字符
代码 说明
. 匹配除换行符以外的任意字符
\w 匹配字母或数字或下划线或汉字
\s 匹配任意的空白符
\d 匹配数字
\b 匹配单词的开始或结束
^ 匹配字符串的开始
$ 匹配字符串的结束
转义字符
转义字符
. *
1
2
3
重复
代码 语法说明

  • 重复零次或更多次
  • 重复一次或更多次
    ? 重复零次或一次
    {n} 重复 n 次
    {n,} 重复 n 次或更多次
    {n,m} 重复 n 到 m 次
    字符类
    在方括号里列出它们就行了,像[aeiou]就匹配任何一个英文元音字母,[.?!]匹配标点符号(.或?或!)。

[0-9]代表的含意与\d就是完全一致的:一位数字;同理[a-z0-9A-Z_]也完全等同于\w(如果只考虑英文的话)

分支条件
rega|regb
1
2
分组
重复单个字符(直接在字符后面加上限定符就行了);

重复多个字符:你可以用小括号来指定子表达式(也叫做分组)

反义
代码 语法说明
\W 匹配任意不是字母,数字,下划线,汉字的字符
\S 匹配任意不是空白符的字符
\D 匹配任意非数字的字符
\B 匹配不是单词开头或结束的位置
[^x] 匹配除了x以外的任意字符
[^aeiou] 匹配除了aeiou这几个字母以外的任意字符
后向引用
使用小括号指定一个子表达式后,匹配这个子表达式的文本(也就是此分组捕获的内容)可以在表达式或其它程序中作进一步的处理。默认情况下,每个分组会自动拥有一个组号,规则是:从左向右,以分组的左括号为标志,第一个出现的分组的组号为 1,第二个为 2,以此类推。

后向引用用于重复搜索前面某个分组匹配的文本。例如,\1 代表分组 1 匹配的文本。难以理解?请看示例:

\b(\w+)\b\s+\1\b可以用来匹配重复的单词,像 go go, 或者 kitty kitty。这个表达式首先是一个单词,也就是单词开始处和结束处之间的多于一个的字母或数字(\b(\w+)\b),这个单词会被捕获到编号为 1 的分组中,然后是 1 个或几个空白符(\s+),最后是分组 1 中捕获的内容(也就是前面匹配的那个单词)(\1)。

你也可以自己指定子表达式的组名。要指定一个子表达式的组名,请使用这样的语法:(?\w+)(或者把尖括号换成’也行:(?‘Word’\w+)),这样就把\w+的组名指定为 Word 了。要反向引用这个分组捕获的内容,你可以使用\k,所以上一个例子也可以写成这样:\b(?\w+)\b\s+\k\b。

使用小括号的时候,还有很多特定用途的语法。下面列出了最常用的一些:
1
2
3
4
5
6
7
8
9
常用分组语法

分类 代码/语法 说明
捕获 (exp) 匹配exp,并捕获文本到自动命名的组里
(?exp) 匹配exp,并捕获文本到名称为name的组里,也可以写成(?’name’exp)
(?:exp) 匹配exp,不捕获匹配的文本,也不给此分组分配组号
零宽断言 (?=exp) 匹配exp前面的位置
(?<=exp) 匹配exp后面的位置
(?!exp) 匹配后面跟的不是exp的位置
(? 匹配前面不是exp的位置
注释 (?#comment) 这种类型的分组不对正则表达式的处理产生任何影响,用于提供注释让人阅读
零宽断言
负向零宽断言
注释
贪婪与懒惰
处理选项
平衡组/递归匹配
详细语法
引用
极客学院-正则表达式

python正则
lua正则
start_pos, end_pos = string.find(str, pattern, [pos])

string.sub(str,pos1, pos2, [plain]) – str[pos1, pos2]

lua的模式匹配规则
lua字符串的api: string.find string.match string.gmatch string.gsub
捕获

http://rangercyh.blog.51cto.com/1444712/1393067
模式
让我们来看看,都有哪些特殊字符需要解释,其实这一部分在Lua的官方文档中,介绍的还是很清楚的:
首先,任何单独的字符,除了上面那些特殊字符外,都代表他们本身。注意前提是他们独立出现。
其次,Lua定义了一些集合,它们分别如下:
. :代表任意的字符。
%a :代表任意字母。
%c :代表任意控制字符。
%d :代表任意数字。
%l :代表任意小写字母。
%p :代表任意标点符号。
%s :代表任意空白字符(比如空格,tab啊)。
%u :代表任意大写字母。
%w :代表任意字母和数字。
%x :代表任意16进制数字。
%z :代表任意跟0相等的字符。
%后面跟任意一个非字母和数字的字符,都代表了这个字符本身,包括上面那些特殊字符以及任何标点符号都可以用这个方式来表达。
[set] :代表一个自定义的字符集合。你可以使用符号 - 来标识一个范围,比如 1-9,a-z 之类的。需要注意的是,上面提到的那些字符集合也可以在这个自定义的集合里用,但是你不能这么写[%a-z],这样的集合是没有意义的。
[^set] :代表字符集合[set]的补集(补集是什么意思,我了个去,问你数学老师去)。
另外,对于上面提到的所有用 % 跟一个字母组成的集合,如果把字母大写,那么就对应那个集合的补集,比如 %S 的意思就是所有非空白字符。Lua官网还强调了一下,这里个定义跟本地的字符集有关,比如集合 [a-z] 就不一定跟 %l 是相等的。
任意一个单字符表达的集合,包括 % 加单字符表达的集合后面都可以跟4种符号,他们分别是 * 、 +、 - 、 ?。

  • :意思是前面的集合匹配0个或者更多字符,并且是尽量多的匹配。
  • :意思是前面的集合匹配1个或者更多字符。
  • :意思是前面的集合匹配0个或者更多字符,尽量少的匹配。
    ? :意思是前面的集合匹配0个或者1个。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值