zoukankan      html  css  js  c++  java
  • php正则表达式填坑

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

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

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

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

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

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

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

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

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

  • 相关阅读:
    库函数文件操作
    系统文件操作函数
    time函数
    字符(串)输入输出函数
    select&epoll
    epoll
    select
    Apache 配置虚拟主机三种方式
    Apache VirtualHost配置
    Scrapy中用xpath/css爬取豆瓣电影Top250:解决403HTTP status code is not handled or not allowed
  • 原文地址:https://www.cnblogs.com/zuoshoupai/p/8711595.html
Copyright © 2011-2022 走看看