永发信息网

正则表达式 的匹配“字符”越多越快,还是相反?

答案:3  悬赏:80  手机版
解决时间 2021-03-11 07:49
表达式:
一、width="69">.*二、69">.*三、width="69">想要抓到我么?呵呵,努力吧
想要抓到我么?呵呵,努力吧

感谢1楼,可是加"()"括号的作用是什么?
分组?我用的C#
最佳答案
这个问题不一定的,因为有时候不同的语言对正则的匹配有不同的优化,比如c#中对^和$肯定有优化,加上他们反倒可以加快查询速度,总的来说正则的效率取决于减少回溯,说白了就是减少正则程序经过不必要的分支。而且有时候为了精确匹配多写些也是必要的。我写一个看看:^.*?width="69">(想要抓到我么?呵呵,努力吧) 这个方程有几种在c#中的优化:1. ^的使用,因为正则无非是字符匹配,无论查找什么都要从字符串开头开始,一旦写了^那么匹配就不会从第一个字符以后字符开始匹配的工作了,这样减少了多余的回溯。2.“.*?”的使用,就像一楼所说像“.*”这样的匹配是饿汉模式,他会匹配所有的字符不过有些编译器会拒绝匹配回车等字符,他在匹配多字符尽头时才会发现后边的正则逻辑不对反过来不断的吐出字符供给其他的匹配逻辑这样会走很多的弯路,用“.*?”这样的懒汉模式就会先匹配后边的正则逻辑减少不必要的回溯。3. c#中寻找确定字符要比模糊字符要快,也就是说要匹配单词字符用“\w”要比[0-9a-zZA-Z]要快,这是编译器优化的工具不然就不会费劲的把这些可以自己写的东西搬上来了,同理的对于具体的字符会比模糊的字符匹配效率高,所以没有用“.*”。c#的正则优化是一门学问至少有几十种的方法,而且还在更新,如果感兴趣可以上网收收,外国有许多这样的网站的。

对了还有一点补充:千万不要随便使用记忆分组也就是“()”。因为严格的讲记忆分组不属于正则数学表达的范畴只是他的实用性所以很多语言都采用他,由于记忆分组会把其中的匹配放到内存中这样会消耗系统资源严重影响效率,要想提高效率要尽量避免记忆分组的使用,对于不需要记忆的单元组可以使用(?:)代替绕开内存记忆。
全部回答
正则表达式什么时候还按照字节来匹配了?正则表达式不分perl、java、js还是python,它是一个独立的系统。 正则本身就决定了它一定是用来匹配字符的。只要给定字符串,就可以来匹配字符串。
谁知道呢,听说越复杂的越快呢.应该被限制的就多,如你用abc去匹配abc,正则比较的时候就会看a是不是匹配a,b是不是匹配b...这样,每个字母只要比较一次,如果你用\w+去匹配,他就会看a是不是字母,b是不是字母,这可能还更麻烦呢.
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
JILI电视 出现factory没有声音怎么办
瑞丰商务宾馆怎么去啊,有知道地址的么
经常头晕什么原因
估以毁坏林木多少才能是犯罪
ps4极品飞车19能两个人玩吗
人生若只如初见,何事秋风悲画扇。什么意思
西安路街道金琴南路社区残疾人协会我想知道这
为什么男朋友总是问我爱他吗?我该怎么回答?
害怕 顾虑 隐情 禁声 惜己 沉默组成的成语
制衣平车怎么速快学会,请会的朋友指教?
Y657这个地址在什么地方,我要处理点事
去澳门的话,应该住什么酒店比较好?澳门热门
【韩宜可】...这促使御史韩宜可在御前当面攻
现在泰安南关蔬菜批发市场的小菜摊搬到哪里去
如何配制200ml浓度为1mo1/L的NaC1溶液
推荐资讯
请问大师,家里佛堂莲花灯,调节声的按钮坏了
我的济南广电网,用无线路由器显示已连接,但
莱阳8月4号一5号上午共下了多少雨
苏州地铁V站志愿者怎么报名
根据《环境影响评价技术导则总纲》,环境影响
王楼镇地址有知道的么?有点事想过去
从天津华苑小区到河北区金钟河大街民权门怎么
P风娜妮地址在哪,我要去那里办事
做生化需氧量用什么型号的溶解氧瓶
第二主族元素氧化物熔点递变规律
杨幂会什么?
鬼怪 韩剧第七集雪糕是什么雪糕
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?