说起正则表达式就是我心中的痛点,做开发已经近三年了,居然不会正则表达式;首先进行自我分析了一波,为什么不学以及又努力学好正则表达式的经历。
首先:为什么不学习正则表达式?
原因(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]
单词分界符
单词的起始位置 \<
单词的结束位置\>
元字符 ?
代表可选项(可以出现也可以不出现)
把它加在一个字符的后面,就表示允许出现这个字符,不过它的出现不出现都无所谓。
其他字符 + *
+ 表示 之前紧邻的元素出现一次或者多次 , * 表示之前紧邻的元素出现任意多次,或者不出现。
说白了就是 * 尽可能匹配多次,如果一次都没有匹配到也没事。
+ 也是尽可能匹配多次,但是如果一次都没有匹配到,就失败了。
规定次数重复的范围
例如 /1[34567]{1}/ 代表:3 4 5 6 7 只允许出现一次,/\d{4}/ 出现4次 整数
括号和反向引用
例如 /(a-z)(0-9)\1\2/ 代表的是 /(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));
很简单,只要掌握了正则表达式的基本功,这些都不是难题。
最后我希望大家不要一味的拷贝正则,根本不理解什么意义的去使用,希望大家不要恐惧一门知识,认真的去学习,可以战胜一切难题。
原文链接:https://www.f2er.com/regex/357850.html