LuaJit转义的问题

之前在项目中,处理类似!30转为表现的字符串时,有人写了这样的一段代码“\![1-2][0-9]”,当换成luajit时启动报错了,出错原因在于转义字符使用不对。在很多语言中,正则的转义字符是“\”,但在lua中却不是,至少标准的不是。

引号,使用“\”进行转义,跟字符串定义类似

local s = “\"Hello World!\””

=> 输出 “Hello World!”  - 带双引号

其它字符如特殊的字符(被称为魔法字符):( ) . % + – * ? [ ] ^ $,想匹配这些字符时需要加上%,比如想匹配%则需要使用%%,%( 匹配左括号 %) 匹配右括号,如果%用于字母和数字的字符,意义就变了,比如%d、%a、%D、%U、%1。

“% + 大写字母”是所有对应小写字母的补集

.

所有字符

%a

字母

%c

控制字符

%d

数字

%l

小写字母

%p

标点符号

%s

空白字符

%u

大写字符

%w

字母和数字字符

%x

十六进制数字

%z

内部表示为0的字符

+

重复1次或多次

*

重复0次或多次

-

也是重复0次或多次

?

出现0或1次

在lua中还是较为方便的处理嵌套的,因为它有%b - 匹配对称字符。

比如下面这个例子

local x = string.gsub(“xddddyxxxxxyxxxy”, “%bxy”, “a”)

print(x)

=>axxxxaxxa

不过要注意的是string.fromat中的格式跟C语言中的printf一样,与上面表格列出的捕获字符不同

不过也有特例和异常,可以参考这里:http://pgl.yoyo.org/luai/i/string.format

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏吴伟祥

Java 可变参数 原

11630
来自专栏Python爬虫与数据挖掘

Python正则表达式初识(二)

前几天给大家分享了Python正则表达式初识(一),介绍了正则表达式中的三个特殊字符“^”、“.”和“*”,感兴趣的伙伴可以戳进去看看,今天小编继续给大家分享P...

10330
来自专栏小二的折腾日记

day5(面向对象2)

注意:千万不要为了获取其他类的功能,简化代码而继承。 必须是类与类之间有所属关系才可以继承,所属关系 is a。

9720
来自专栏WD学习记录

C#学习笔记(三)

隐式转换:从类型A到类型B的转换可以在所有情况下进行,执行转换的规则非常简单,可以让编译器执行转换。

12610
来自专栏程序员的知识天地

20分钟搞定Python 函数基础知识

简单地说,一个函数就是一组Python语句的组合,它们可以在程序中运行一次或多次运行。Python中的函数在其他语言中也叫做过程或子例程,那么这些被包装起来的语...

14530
来自专栏极客猴

Python中“is”和“==”的区别

相比 C/C++ 、Java 等强类型语言, Python 定义变量的方式就简单多了。我们只需要给变量起个变量名,而不需要给变量指定类型。

11320
来自专栏C语言及其他语言

【编程经验】结构体的定义和使用

结构体的定义和使用 结构体与数组类似,都是由若干分量组成的,与数组不同的是,结构体的成员可以是不同类型,可以通过成员名来访问结构体的元素。 ...

368120
来自专栏java初学

java — 静态绑定和动态绑定

46380
来自专栏老马说编程

计算机程序的思维逻辑 (13) - 类

类 程序主要就是数据以及对数据的操作,为方便理解和操作,高级语言使用数据类型这个概念,不同的数据类型有不同的特征和操作,Java定义了八种基本数据类型,其中,...

196100
来自专栏前端知识分享

第171天:面向对象——对象实例和原型对象进阶

这样,如果我们需要修改所有实例中的属性或者方法,就只需要修改一处,就能够影响到所有实例了

10130

扫码关注云+社区

领取腾讯云代金券