php正则表达式填坑

         很多程序员都对正则挺怵的。以前我也这么想,后来真用上了,觉得这玩意儿真是个好东西。与其专门去学Python来抓数据,还不如直接get到这个知识点。而且正则这个东西是跨语言的,Js,python里同样会用得到,所以这是个很受用的技能,学到就是赚到。

         我写这篇文章是为了填坑的,不是宣传知识点的。网上各种贴子对知识点已经写得特别详细了,肯定在我水平之上。比如,[],{},(),.*?^$这些符号,以及换行,空格等标识符的介绍使用就请在网上搜罗吧,本人推荐csdn和博客园,里面的大牛都总结得特别好。如果你已经对这些语法使用有一定了解了那么接下来一起填坑吧。

一,空格匹配。这是我见到的最大坑点。’  ‘引号里面是空格, 也是空格,换个行也是空格。所以匹配的时候使用 还是’  ‘,还是\s呢。以我个人经验一般用\s{0,4}这样配合使用,不奏效的话再换 或者偷点懒直接打一串空格。如果碰上换行,那就得[\s\n\r]{0,4},如果空格很多就把4改成更大的数字,但是不建议无限大。尽量缩小匹配范围会更精确。

二,一步一步调试。看到第一个坑是不是觉得我是个江湖郎中——蒙事儿的。真有经验的人肯定是一气呵成写出非常严谨准确的表达式了,哪还用换着试的。实话告诉你,我还真没有见过敢保证一次匹配成功的(也许是我见识少)。一点一点测试直到匹配成功,我感觉没啥丢人的,能把功能做出来就算成功了。太追求效率一下子写一大串调试起来很麻烦。

三,匹配字符。在php里用正则一般是抓数据的,匹配的数据一般都用.*?这样表示,意思是匹配符合要求的所有字符并且是非贪婪匹配。可是一个点虽然包罗万向涵盖了数字字母以及各种符号,但是换行符段落符就不归它管了。如果是这样可以改用[\s\S]*?来表示。

四,字符长度。很多人喜欢用*号而不用?号,用{1,}而不用{1,30}等限制字符。这样很容易造成贪婪匹配,达不到想要的数据。所以还是严谨一些吧。

五,眼见为实。这四个字怎么理解呢。我们用正则匹配的内容是浏览器从服务器返回的数据,而浏览器显示的以及firbug里展示的实际上已经经过“转化了”,可能一些空格,换行,大小写,单引双引号已经不是原来的样子。不管表达式写得多好就是not found。因此,不管用file_get_contents还是curl,先echo出来内容,再根据“实际”内容进行匹配,免得走弯路。

六,使用其它工具。有时候你用正则很难处理的字符,用php的函数很容易实现,或者用js也很好处理。比如多个少个点,或者中英文混在一起中间有个空格分割的。如果你是大牛可以用正则无所不能,但是咱们这些初级选手就没必要那么钻。

好了,就想到这么多了。祝大家学习进步,事业有成。

posted @ 2018-04-03 22:40  左手拍拍  阅读(183)  评论(0编辑  收藏  举报