正则表达式学习和感悟
说起正则表达式就是我心中的痛点,做开发已经近三年了,居然不会正则表达式;首先进行自我分析了一波,为什么不学以及又努力学好正则表达式的经历。 首先:为什么不学习正则表达式? 原因(1):正常开发中用不到。 (2):偶尔用到了验证邮箱的和手机号的直接百度复制来用就搞定了。 就是上面这两点一直是我没有学习正则表达式的根源。 为什么又学习了? (1)发现面试经常会出正则表达式的问题。 (2)有这么难吗? 就这样开始了正则表达式的学习之旅。 学习肯定要找一本入门书籍,找了很多,评价还不错的是《精通正则表达式》这一本书籍,于是就下载了pdf格式的书籍进行阅读,我读书都是pdf格式的书籍,纸质的书籍不太喜欢。 大概经过了1个月的学习,把整本书读完了,发现正则表达式顺手拈来,嘻嘻。 下面是我的一些总结.
元字符 ^
表示输入的开始
例如:/^a/ 匹配以a开头的字符串,另外一种情况是在字符组(台湾人翻译成了字符集,意思大概一样)里面使用就是非的意思了;例如/[^a-z]/ 不是a至z开头的字符串
元字符 $
表示结束
例如:/^cat$/ 标示查询以cat开头的字符串
元字符 .
匹配任意字符
例如搜索03/19/76,03-19-76 : /03[/-]19[/-]76/
元字符 |
表示 或的意思
例如 :/^gr[ea]y/ 等价于 /^gr(e|a)y/
忽略大小写
例如:/[Ff][Rr][Oo][Mm]/ 取代 [from]
单词分界符
单词的起始位置 &;
单词的结束位置&;
例如匹配单词cat : /&;cat&;/ 不过我测试php的正则好像不支持单词分界
元字符 ?
代表可选项(可以出现也可以不出现)
把它加在一个字符的后面,就表示允许出现这个字符,不过它的出现不出现都无所谓。
其他字符 + *
+ 表示 之前紧邻的元素出现一次或者多次 , * 表示之前紧邻的元素出现任意多次,或者不出现。
说白了就是 * 尽可能匹配多次,如果一次都没有匹配到也没事。
+ 也是尽可能匹配多次,但是如果一次都没有匹配到,就失败了。
规定次数重复的范围
例如 /1[34567]{1}/ 代表:3 4 5 6 7 只允许出现一次,/d{4}/ 出现4次 整数
括号和反向引用
例如 /(a-z)(0-9)12/ 代表的是 /(a-z)(0-9)(a-z)(0-9)/ 1引用了(a-z) 2引用了(0-9)
转义
匹配一个括号内的字符串
例如:/([a-zA-Z])/ 就可以匹配 (very) 消除的()的意义
消除 $ 和 小数点 的意义 .
/$[0-9].[0-9]/
这些基本的元字符含义是必须了解并且记住的,明白了这些才能很快的写出自己想要的正则表达式。 比如前天一个人问我,如何获取这里面的网址:
$str = "事发后地阿斯护走了吗分离是rpc.com撒事发到csdn.cn"; if(preg_match_all('/[a-zA-Z]+.(com|cn)/is',$str,$array)) { var_dump($array); } 这种东西只要熟悉了正则的元字符,是非常容易的。 再比如清楚html标签:
//清除html标签 $str = "你好<div>ok</div>,大家好"; $reg = "/<(/?div.*?)>/i"; var_dump(preg_replace($reg,"",$str)); 很简单,只要掌握了正则表达式的基本功,这些都不是难题。 最后我希望大家不要一味的拷贝正则,根本不理解什么意义的去使用,希望大家不要恐惧一门知识,认真的去学习,可以战胜一切难题。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |