正则表达式学习和感悟

前端之家收集整理的这篇文章主要介绍了正则表达式学习和感悟前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

说起正则表达式就是我心中的痛点,做开发已经近三年了,居然不会正则表达式;首先进行自我分析了一波,为什么不学以及又努力学好正则表达式的经历。

首先:为什么不学习正则表达式?

原因(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)\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

猜你在找的正则表达式相关文章