正则效率,\w误区

本文首写于公司小组内部分享。

先前听导师说过正则效率不算高,就特意去看了一点相关的,做个笔记

http://note.youdao.com/share/?id=cb801321e015542b87575b8c6d39748b&type=note 

http://note.youdao.com/share/?id=18d43e79ded05c812488544eff18412b&type=note 

看的时候想到了先前写过正则匹配英文邮箱,突然想到可以有中文的邮箱,遂去写了一下,遇到个坑。

\w 匹配【字母、数字、下划线、汉字】,这几乎是大众认识,但这并不准确。看下图,俄文字符都匹配出来了,查了好些资料,发现\w,他匹配的是包括下划线的任何单词字符。类似但不等价于“[
A-Za-z0-9_ ]”,这里的"单词"字符使用Unicode字符集,包括俄文等单词如а。

如果想要匹配中文,英文字母,数字,下划线(_),该怎么办呢?

正确做法:[\u4e00-\u9fa5_a-zA-Z0-9]

附上自己写的英文、中文邮箱匹配实录:

http://note.youdao.com/share/?id=6b2b0063b7b9963959fca3750b931baa&type=note 

或访问 CSDN 《正则表达式匹配邮箱》。

有任何问题欢迎批评指正。

时间: 2024-12-30 18:26:54

正则效率,\w误区的相关文章

jQuery 中关于CSS操作部分使用说明_jquery

刚刚看了下jQuery的源代码,其中关于CSS及className的操作思想确实很不错,值得借鉴. 其中关于jQuery.className.has的定义部分,是用的正则来实现的,其实此处直接利用Javascript中String对象的indexOf方法来作处理的话,比用正则效率会更些,因此 复制代码 代码如下: jQuery.className.has的定义可以改进成:      has: function( t, c ) {        t = t.className || t;     

用php实现proxy功能的示范 [已升级至v0.0.2]

刚刚写的练手的作品.感觉还是有些实用价值的..放出来给大家试试.功能:通过php实现代理功能适用用户:在家下载较慢.且懒得找proxy.且有高速主机,且主机有php,且主机支持socket.使用方法:1.把本程序传到主机上2.通过浏览器浏览主机上的此文件3.在url中填入欲下载的文件地址(如果有必要,可以填入referer)4.点击get proxy url5.新打开的页面中的链接即为通过proxy下载的链接 注意:1.支持多线程下载,断点续传2.仅支持http协议3.不支持服务器端header

分号-求助分割 , 正则表达式

问题描述 求助分割 , 正则表达式 例如 小网,小菜,小王,小二,小三 以 , 分割开来 得到 小网 小菜 小王 小二 小三 正则表达式怎么写阿 ! help 直接split函数 可以但是我不需要他, 程序通过正则获取到 这些人姓名,然后用不同的颜色区分, 只需要 而且只能用正则表达式来获取.不需要去用 split来一一获取 解决方案 直接split函数,不是比正则效率高很多? 解决方案二: String s = "小网,小菜,小王,小二,小三"; String arr[] = s.s

正则表达式之 贪婪与非贪婪模式详解(概述)_正则表达式

1 概述 贪婪与非贪婪模式影响的是被量词修饰的子表达式的匹配行为,贪婪模式在整个表达式匹配成功的前提下,尽可能多的匹配,而非贪婪模式在整个表达式匹配成功的前提下,尽可能少的匹配.非贪婪模式只被部分NFA引擎所支持. 属于贪婪模式的量词,也叫做匹配优先量词,包括: "{m,n}"."{m,}"."?"."*"和"+". 在一些使用NFA引擎的语言中,在匹配优先量词后加上"?",即变成属于非

经典JavaScript正则表达式实战(附pdf)_正则表达式

关于测试代码 本文不是使用Dreamweaver编辑,以下测试代码可能已经在赋值粘贴的过程做了一些调整,可能执行失效.可以参看本文的pdf版本. 匹配结尾的数字 如 复制代码 代码如下: 30CAC0040 取出40 3SFASDF92 取出92 正则如下:/\d+$/g 统一空格个数 字符串内字符键有空格,但是空格的数量可能不一致,通过正则将空格的个数统一变为一个. 例如:蓝 色 理 想 变成:蓝 色 理 想 aobert的正则: 复制代码 代码如下: <script type="tex

正则表达式-深入理解

一 前言 对于正则表达式,相信很多人都知道,但是很多人的第一感觉就是难学,因为看第一眼时,觉得完全没有规律可寻,而且全是一堆各种各样的特殊符号,完全不知所云. 其实只是对正则不了解而以,了解了你就会发现,原来就这样啊正则所用的相关字符其实不多,也不难记,更不难懂,唯一难的就是组合起来之后,可读性比较差,而且不容易理解,本文旨在让大家对正则有一个基本的了解,能看得懂简单的正则表达式,写得出简单的正则表达式,用以满足日常开发中的需求即可. 0\d{2}-\d{8}|0\d{3}-\d{7} 先来一段

再认识结对编程

摘要 结对编程是敏捷软件开发中的重要实践活动,然而国内业界对结对编程如何提高软件开发效率的实现并不明确.作者根据亲身敏捷软件开发过程的经验,深入探讨了其对提高软件开发效率的实际作用.   正文 结对编程是极限编程(XP)的十二个实践之一,是指两位程序员肩并肩地坐在同一台电脑前合作完成同一个设计.同一个算法以及同一段代码,并且两人的角色可以随时互换.XP认为结对编程能提高软件开发效率,很多国外软件企业都在热衷于结对编程,Facebook程序员肯特•贝克(Kent Beck)表示:"结对程序员之间的

提高php程序性能和负载测试

计算执行的时间 通过下面这个简单的方法可以计算一段程序的执行时间(微妙)  代码如下 复制代码 $start_time = microtime(true); //一些需要计算时间的代码 //... code here ... print('代码的运行时间是:'.getExecTime($start_time)); function getExecTime($start_time) {  return microtime(true)-$start_time; }PEAR的Benchmark模块提供

replaceall-字符串的replaceAll方法的时间复杂度是多少??

问题描述 字符串的replaceAll方法的时间复杂度是多少?? java中字符串的replaceAll方法的时间复杂度是多少??是O(n)吗 解决方案 这个用的正则 正则效率,建议找本书看看正则的效率,根据你正则的写法效率是不一样的. 解决方案二: 不是吧 一次遍历就能解决的,应该是 O(1) 解决方案三: http://stackoverflow.com/questions/4378455/what-is-the-complexity-of-regular-expression http:/