今天在精易编程助手里调试一段正则表达式,然后用精易编程助手生成代码,粘贴到易语言里运行,却提示正则创建失败,这个问题已经不是第一次遇到了,印象中是第二次。
是什么原因造成的呢?群里问了,但是没有回复,或者没有答对。
后面想到在正则表达式中,小括号、中括号、大括号都是有特殊含义的,而我这段代码里面是存在大括号的,所以可能是这个大括号造成的。
为了验证这个问题,只要把大括号用转义代替就可以了,即
\{
原代码如下:
“姓名(.*?)” + #引号 + “(.*?)性别(.*?)民族(.*?)” + #引号 + “(.*?)出生(.*?)年(.*?)月(.*?)日(.*?)住址(.*?)” + #引号 + “},{” + #引号 + “words” + #引号 + “:” + #引号 + “(.*?)” + #引号 + “(.*?)公民身份号码(.*?)” + #引号
修改后代码如下:
“姓名(.*?)” + #引号 + “(.*?)性别(.*?)民族(.*?)” + #引号 + “(.*?)出生(.*?)年(.*?)月(.*?)日(.*?)住址(.*?)” + #引号 + “\}” + “,” + “\{” + #引号 + “words” + #引号 + “:” + #引号 + “(.*?)” + #引号 + “(.*?)公民身份号码(.*?)” + #引号
造成这个错误的原因,其实应该是精易编程助手内置的生成代码,没有注意到这个问题,即没有把中括号、大括号转义处理就生成了正则表达式。
2019年2月20号补充:这个表述有问题,中括号是不需要转义的,直接包含在引号里面即可。今天写一个正则表达式,结果在精易编程助手里运行的好好的,但是放到易语言里却怎么样都不行,折腾了两个小时,终于得到了结论,原来我在写到易语言里时,试图对中括号和反斜杠转义,实际上却是不需要转义的,大括号需要转义。
2019年2月21号补充:经过思考,20号的结论有问题,当对中括号转义时,是当源文本中出现了中括号,为了表示这个中括号才转义;但我是写正则表达式:
[\s\S]
这个并不是源码中出现的,中括号本来就是正则表达式的一部分,就是文章开头说的小括号、中括号、大括号都是有特殊含义的,所以直接表示出来就可以了。反斜杠也是正则表达式的一部分,并不是表示原文本中的反斜杠,所以也不需要转义。
标签: 正则表达式