"本文将带你快速掌握正则表达式的核心概念和使用方法,特别是针对PHP环境下的应用。在短短一刻钟内,你就能对正则表达式有深入的理解,不容错过。" 正则表达式(Regular Expression)是编程中用于处理字符串的强大工具,尤其在PHP中,它被广泛用于文本匹配、查找、替换和提取等操作。通过学习正则表达式,你可以高效地处理复杂的文本模式匹配问题。 1. **基础元素**: - `.`:匹配任意单个字符,除了换行符(\n)。 - `^`:匹配输入字符串的开始位置。 - `$`:匹配输入字符串的结束位置。 2. **量词**: - `*`:匹配前面的子表达式零次或多次。 - `+`:匹配前面的子表达式一次或多次。 - `?`:匹配前面的子表达式零次或一次。 - `{n}`:匹配前面的子表达式恰好n次。 - `{n,}`:匹配前面的子表达式至少n次。 - `{n,m}`:匹配前面的子表达式至少n次但不超过m次。 3. **特殊字符与转义**: - `\`:用于转义特殊字符,如`\d`代表数字,`\s`代表空白字符等。 - `[]`:字符类,匹配括号内的任意一个字符。 - `|`:或操作符,表示左右两边的子表达式可以匹配其中之一。 4. **预定义字符类**: - `\d`:等价于 `[0-9]`,匹配数字。 - `\D`:等价于 `[^0-9]`,匹配非数字字符。 - `\s`:匹配任何空白字符,包括空格、制表符、换页符等。 - `\S`:匹配任何非空白字符。 - `\w`:等价于 `[a-zA-Z0-9_]`,匹配字母、数字和下划线。 - `\W`:等价于 `[^a-zA-Z0-9_]`,匹配非单词字符。 5. **分组与捕获**: - `( )`:用于创建捕获组,捕获括号内的子表达式。 - `\1`、`\2`等:引用之前被捕获的组。 6. **预定义模式**: - `\b`:单词边界,用于匹配单词的开始或结束。 - `\B`:非单词边界,用于匹配不在单词边界的字符。 7. **修饰符**: - `i`:使匹配对大小写不敏感。 - `g`:全局匹配,找到所有匹配项,而不仅仅是第一个。 - `m`:多行模式,使`^`和`$`能匹配每一行的开始和结束。 8. **特殊字符的使用**: - 使用`\\`转义特殊字符,如`\\n`匹配一个换行符。 - 在模式中,如果需要匹配`^`或`$`,需使用`\`进行转义,如`\^`和`\$`。 9. **零宽断言**: - `(?=...)`:正向前瞻断言,确保匹配的位置后面紧跟指定的模式。 - `(?!...)`:负向前瞻断言,确保匹配的位置后面不跟指定的模式。 10. **分隔符**: - PHP中的正则表达式通常使用`/`作为分隔符,但也可以使用其他字符,例如`#`或`~`,以避免与模式中的特殊字符冲突。 通过理解和熟练运用以上知识点,你将在PHP环境中自如地运用正则表达式,解决各种文本处理难题。记得在实践中不断练习和探索,正则表达式的魅力会在你的项目中逐渐展现。
开篇,还是得说说 ^ 和 $ 他们是分别用来匹配字符串的开始和结束,以下分别举例说明
"^The": 开头一定要有"The"字符串;
"of despair$": 结尾一定要有"of despair" 的字符串;
那么,
"^abc$": 就是要求以abc开头和以abc结尾的字符串,实际上是只有abc匹配
"notice": 匹配包含notice的字符串
你可以看见如果你没有用我们提到的两个字符(最后一个例子),就是说 模式(正则表达式) 可以出现在被检验字符串的任何地方,你没有把他锁定到两边
接着,说说 '*', '+',和 '?',
他们用来表示一个字符可以出现的次数或者顺序. 他们分别表示:
"zero or more"相当于{0,},
"one or more"相当于{1,},
"zero or one."相当于{0,1}, 这里是一些例子:
"ab*": 和ab{0,}同义,匹配以a开头,后面可以接0个或者N个b组成的字符串("a", "ab", "abbb", 等);
"ab+": 和ab{1,}同义,同上条一样,但最少要有一个b存在 ("ab", "abbb", 等.);
"ab?":和ab{0,1}同义,可以没有或者只有一个b;
"a?b+$": 匹配以一个或者0个a再加上一个以上的b结尾的字符串.
要点, '*', '+',和 '?'只管它前面那个字符.
你也可以在大括号里面限制字符出现的个数,比如
"ab{2}": 要求a后面一定要跟两个b(一个也不能少)("abb");
"ab{2,}": 要求a后面一定要有两个或者两个以上b(如"abb", "abbbb", 等.);
"ab{3,5}": 要求a后面可以有2-5个b("abbb", "abbbb", or "abbbbb").
现在我们把一定几个字符放到小括号里,比如:
"a(bc)*": 匹配 a 后面跟0个或者一个"bc";
"a(bc){1,5}": 一个到5个 "bc."
还有一个字符 '│', 相当于OR 操作:
"hi│hello": 匹配含有"hi" 或者 "hello" 的 字符串;
"(b│cd)ef": 匹配含有 "bef" 或者 "cdef"的字符串;
"(a│b)*c": 匹配含有这样多个(包括0个)a或b,后面跟一个c
的字符串;
一个点('.')可以代表所有的单一字符,不包括"\n"
如果,要匹配包括"\n"在内的所有单个字符,怎么办?
对了,用'[\n.]'这种模式.
剩余6页未读,继续阅读
- 粉丝: 0
- 资源: 2
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Flex垃圾回收与内存管理:防止内存泄露
- Python编程规范与最佳实践
- EJB3入门:实战教程与核心概念详解
- Python指南v2.6简体中文版——入门教程
- ANSYS单元类型详解:从Link1到Link11
- 深度解析C语言特性与实践应用
- Gentoo Linux安装与使用全面指南
- 牛津词典txt版:信息技术领域的便捷电子书
- VC++基础教程:从入门到精通
- CTO与程序员职业规划:能力提升与路径指南
- Google开放手机联盟与Android开发教程
- 探索Android触屏界面开发:从入门到设计原则
- Ajax实战:从理论到实践
- 探索Android应用开发:从入门到精通
- LM317T稳压管详解:1.5A可调输出,过载保护
- C语言实现SOCKET文件传输简单教程