技术头条 - 一个快速在微博传播文章的方式     搜索本站
您现在的位置首页 --> 查看专题: 正则
    最近在做手机页面时,遇到数字输入的键盘的问题,之前的做法只是一刀切的使用 type="tel",不过一直觉得九宫格的电话号码键盘上的英文字母太碍事了。于是想要尝试其它的实现方案,最终的结论却令人沮丧。不过也趁机详细了解了下pattern这个属性。
    oracle数据库从10g开始引入了对正则表达式的支持,正则表达式是一种描述简单和复杂的搜索和处理模式的方法,在与SQL一起使用时,正则表达式可以对Oracle数据库中存储的任何数据执行强大的搜索和处理。oracle数据库引入正则表达式以后一个明显的好处是,可以把匹配逻辑集中在数据库端,避免了在中间层中匹配处理,实现起来更加方便。
    前段时间阅读Underscore源码的时候,踩了不少正则表达式的坑。正则表达式是一项非常实用的技能,可是每次遇到正则相关的问题,我都是回避(总以为正则表达式在网上搜搜就好了。同时,又觉得这玩意儿难,学习成本比较大)。看了一篇关于正则表达式的文章后,慢慢觉得正则并不是想象中那么难,关键是理解正则的核心思想后,多思考、多实践。本篇博文中的正则相关测试主要针对javascript!
    在开发中,正则的修饰符也是不可缺少的一部分。往往扮演着重要的角色,下面是我开发中收集的资料,以便以后项目中使用。。。。
    上周在深圳见朋友,聊天时仍然把“正则表达式”和我联系在一起,这真让人惭愧,因为我已经很久不写正则表达式了,甚至有些生疏。估计是Jeffrey Fridel的《精通正则表达式》写得太好,身为译者的我也沾了不少光,收获不少虚名。为避免误解,撇去虚名,有必要专门写写我和正则表达式的故事。
    第一次接触正则表达式是在今年四月的腾讯笔试,当时是一道选择题问如何判断输入的是否是 QQ 号码(即纯数字),当时是蒙了一个答案,菜鸟不会嘛 ╮(╯3╰)╭ 。事后自己倒专门学习了正则表达式,还做了笔记,可是平时开发倒的确是用得少,最近倒也忘了,近来又是校招的季节,自己就重新整理一篇简要入门,分享给大家的同时,自己也复习复习。
    情况回放: 上周预发机器出了一个问题,CPU不定时会近100%满负载运行。重启以后就会恢复,之后又会到达100%,而且不会自恢复。 首先想到的是程序出现了死循环,于是用jstack把栈打印出来,发现业务线程都停在了regex相关的代码上,有死循环的样子。 查看栈,发现一切都是由ClientFilter这个类开始,其使用了matcher.matches()方法。这样一来,就很可能是由于输入了不规范的正则导致的了。
    流程:从 history 命令中得到最近1000条命令。 删除每行的行号。记录每一行中的命令。行首的第一个英文单词,以及管道后面的第一个英文单词,视为命令名称。将得到的命令列表排序。统计每个命令的出现次数,先以次数降序排列,再以命令名称升序排列。
    只要是知道“正则”这个词的,上网搜集个把资料,应该就不是问题吧。我获得正则消息的网絡渠道有这样几个,以质量从高到低排序:dilicious标签(颇有些不错的文章) > 一些与正则相关的博客(可以参考我整理的这个页面正则链接 ,不定期更新中) > google alerts (关键词[regex, regular expressions, 正则,正则表达式]都建议添加,有时也能发现好文章)。
    平时一直都在用非常简单的表达式,匹配位置的时候,用几个元字符就够了。当今天不得不从别人的C源代码中取出一个特定宏的定义时候,终于觉得我要用零宽断言来匹配位置了。用的是python的 re模块,开始半天都匹配不上,因为是GUI程序,竟然也没有仔细看控制台的输出。后来仔细看了一下,又google了一下,看到两个匹配要取出字符串前面的零宽断言都必须是定长的时候……才明白怎么回事。
    正则用了好些年,有两个东西总结出来是在web开发中非常有用的,尤其在抓取、代码分析中经常用到。
    如果标签里面有中文、英文、数字等混排,则需要对汉字进行特殊处理,由于PCRE不支持\U \P \L之类的perl字符串处理转义,需要对汉字单独处理,使用16进制或者Unicode进行处理。
    我记得早前有同事问, 正则是否能处理括号配对的正则匹配. 比如, 对于如下的待匹配的字符串: ((())) 就是一个括号配对的字符串. 而对于如下的待匹配字符串: ((() 则不是一个括号配对的字符串. 在以前, 这种情况, 正则无法处理, 最多只能处理固定层数的递归, 而无法处理无线递归的情况... 而在perl 5.6以后, 引入了一个新的特性: Recursive patterns, 使得这种需求可以被正确的处理.
    上一文《正则优化一则:CSS选择符匹配》中说到了如何优化一个正则在匹配成功时的效率,而实际上正则匹配有成功就会有失败,因此失败时的效率也是需要注意的。继续上文中的正则,分析了一下优化前和优化后表达式失败时的效率.
    结果显示,在匹配成功的情况下,IE、Firefox的性能提升在1倍以上,Chrome下也超过50%。
    正则表达式很可怕很可怕,但是,一旦你记住并且明白了这些符号的意义,那么这些恐惧就会马上消失。如果你现在心中还有那份恐惧感,那就赶紧往下看吧。 基础知识 学好正则表达式子的关键一步就是花一点时间记住这些符号。这是最好的建议了。坐下来,好好记一记,很快的: .:会匹配任何字符,在dotall模式为false的时候不会匹配换行符。 *:匹配0个或者多个上面的那个字符可以匹配的 +:匹配一个或者多个上面那个字符可以匹配的 ?:...
    分享一个同事写的URL正则表达式,缺点不支持中文URL。
    关于 grep 命令的介绍,大家可以参考这里:《grep 正则表达式及选项》使用过程中,使用最多的参数就是 -v ,但是用着并不爽。比如说,我想查找一个单词“UserService”,但是像”*.svn” 这种文件就不用显示了,我该怎么做呢?
    学习正则表达式中,这个顺序环视和逆序环视,搞的比较头晕。 所以,我决定还是写在日志里吧。这样以后回忆起来方便,如果哪里理解错了,路过的朋友们请帮忙指出,谢谢! 所谓顺序环视和逆序环视,首先要理解,这个环视匹配的什么?不是内容,而是位置。并且是位置的前后要匹配对应的内容。这样理解就事半功倍了。 先来看顺序环视,这个顺序说的是从左往右看。
[ 共33篇文章 ][ 第1页/共2页 ][ 1 ][ 2 ]
赞助商广告
© 2009 - 2024 by blogread.cn 微博:@IT技术博客大学习

京ICP备15002552号-1