TC官方合作论坛

标题: 【字符串类】正则表达式第一课。通配符,数量限制符。 [打印本页]

作者: 剑仙十号    时间: 2017-6-22 19:19
标题: 【字符串类】正则表达式第一课。通配符,数量限制符。
本帖最后由 剑仙十号 于 2018-3-13 11:57 编辑

【字符串类】正则表达式第一课。通配符,数量限制符。

通配符“.”,数量修饰符“?”,数量贪婪符“+” “*”, 数量限制符{ }。

第一节:通配符“.”
通配符“.”,匹配除换行符以外 的任何单个字符。占据一个字符位置。

var 源字符串 = "A\n1a\n2ab\n2abc\n3abc\n4abc\n4abcd\n5aaaaaa\n6bbbbbb"

上面的每个id号,都用换行符"\n"做分割。
通配符“.”,匹配除换行符以外的任何东西。用“.”匹配的东西,可以由换行符分隔。匹配4个字符的id,表达式这样写:
//var arr=正则表达式匹配(…, …, 是否_不区分大小写, 是否全局, 是否Unicode码, 是否多行) 真为是,假为否。
//var 表达式 = "...."

var 源字符串 = "A\n1a\n2ab\n2abc\n3abc\n4abc\n4abcd\n5aaaaaa\n6bbbbbb"
var 表达式 = "...."
var arr=正则表达式匹配(源字符串,表达式,假,真,假,真)
var n = 数组大小(arr)
if(n > 0)
for(var j = 0;  j < n;  j++)
  traceprint(arr[j])
end
end

=======================================================

第二节:数量修饰符 “?”
? 用来修饰 前面一个东西的数量。不占字符位置。
后面跟有 ? 的东西,出现1次或0次。

例子:
把3个/4个字符的id,都匹配出来。
var 表达式 = "....?"
在“.”后面跟有一个“?”号,表示这个“.”可以有,也可以无。
有“.”的时候,等价于"....",匹配4个字符的id。
没“.”的时候,等价于"...",匹配3个字符的id。


=======================================================

第三节:数量贪婪符:“+”号,“*”号。
“+”和“*”,用来修饰 前面一个东西的数量。不占字符位置。
被“+”修饰的东西,出现1次到无限次。所以这是贪婪。
被“*”修饰的东西,出现0次到无限次。所以这也是贪婪。

=======================================================
第四节:数量限制符 { },限制前面的东西的数量,不占字符位置。

有的时候,我们可能会碰到这样的问题:
有这样一段字符串:
var 源字符串 = "a=1010;a=msdn;a=1314;a=vs2013;"
我想匹配字符串的:
“1010”、“msdn”、“1314”和“vs2013”。
然后我写了这个表达式
var 表达式 = "a=(.*);" //圆括号里面的东西,表示一个整体的子表达式。
var arr=正则表达式匹配(源字符串,表达式,真,真)
结果……却匹配到了这样一段字符串:
“1010;a=msdn;a=1314;a=vs2013”。

仔细想想:. 可以匹配分号。这表达式确实可以匹配到这样的结果,但不是我想要的结果。我们该怎么办。
问题就在于,没有限制 . 出现的数量。
用{ }去限制前面的东西,出现的数量。
用法:
“{n}”前面的东西,限定出现n次。
“{n,m}”前面的东西,最少出现n次,最多出现m次。
“{n,}”前面的东西,最少出现n次,最多出现无限次。

返回刚才的问题。
用“{}”来限定 "."出现4~6次。
var 表达式 = "a=(.{4,6});"
这样就可以达到我们的要求。

复习下数量符 ? + *
? :匹配前面的整体/子表达式 0次或1次。
例如,"do(es)?" 可以匹配 “do” 或 “does” 中的”do” 。
? 等价于 {0,1}。

+ :匹配前面的整体/子表达式 1次或多次。
例如,"zo+" 能匹配 “zo” 以及 “zoo”,但不能匹配 “z”。
+ 等价于 {1,}。

* :匹配前面的整体/子表达式 0次或多次。
例如,"zo*" 能匹配 “z” 以及 “zoo”。
* 等价于{0,}。
作者: 剑仙十号    时间: 2017-6-22 19:20
本帖最后由 剑仙十号 于 2018-4-21 18:31 编辑

目录课:
http://bbs.tyuyan.net/forum.php?mod=viewthread&tid=65817&mobile=no
第二课:
http://bbs.tyuyan.net/forum.php?mod=viewthread&tid=65819&mobile=no

二楼,更新信息专用。
tc简单开发_爱好群:
433286131 (462/500)

tc简单开发_爱好群Ⅱ:
143358382 (192/500)

tc办公文本_爱好群:
612661895(29/500)

本群大神众多,新手众多。群文件内 资源海量。 希望新手 分享更多笔记,减少重复造轮子的时间。 好编程,齐学习,齐进步。

作者: luxiuqing    时间: 2017-6-22 20:05
支持
作者: pengj88    时间: 2017-6-22 22:31
瞧瞧,向学习致敬
作者: peter_net    时间: 2017-6-23 03:03
感谢无私的分享!!
作者: itcfan    时间: 2017-6-23 08:58

作者: qq306414664    时间: 2017-6-23 13:25
11111111111111111111111
作者: 东月山    时间: 2017-6-23 15:24
老规矩,先回后下!!!!!!!

作者: a8012602    时间: 2017-6-24 20:41
正则第一课
作者: 05windows    时间: 2017-6-26 10:17
则表达式匹配(…, …, 是否_不区分大小写,
作者: 13533234040    时间: 2017-6-26 19:33
6666666666666666666666666666666666666666666666
作者: zcywbd    时间: 2017-7-2 16:53
感觉这个一提名字就晕
作者: zhangboning8888    时间: 2017-7-10 22:01
而加入日
作者: 类人猿    时间: 2017-7-15 08:04
看看学习下吧
作者: rong14789    时间: 2017-7-22 08:44
看看看
作者: a3258699    时间: 2017-9-10 23:11
我来学习
作者: a3258699    时间: 2017-9-10 23:11
我来学习
作者: 312864058qq    时间: 2017-9-20 02:08
学习到了
作者: yanzehua    时间: 2018-1-2 22:28
ooooooooooooo
作者: yanzehua    时间: 2018-1-2 23:11
kkkkkkkkkkkkk
作者: DZking2018    时间: 2018-1-8 23:13
什么意思看不懂
作者: 1989917916    时间: 2018-1-21 19:46
111111111111111111111
作者: flywuya88    时间: 2018-1-29 13:35
式第一课。学习收获
作者: forever43    时间: 2018-2-4 09:38

支持
作者: luxinwen    时间: 2018-2-6 19:23
转义字符,“\”
作者: 88979825    时间: 2018-3-11 19:18
6666666666666666
作者: 947942434    时间: 2018-4-3 22:39
546465465456
作者: hitomisky    时间: 2018-4-27 16:44
支持一个~!!!
作者: dpx005    时间: 2018-5-6 00:54
看看看看!!
作者: dongxc25    时间: 2018-6-26 14:04
谢谢分享…………
作者: qq297329239    时间: 2018-7-30 17:16
补发vkjhgerl;kgf凯立德的任何刚好




欢迎光临 TC官方合作论坛 (http://bbs.52tc.co/) Powered by Discuz! X3.1