## 4-2. 元字符 >[info] 元字符是修饰原子字符的,可以理解为原子的定语或限定条件 * 举个生活中的小例子:戴帽子的男生 * 其中【戴帽子的】就是【元字符】; * 那个【男生】,就是【原子】。 * * * * * * 注意二点: 1. 元字符不允许单独使用,必须配合原子,共同工作; 2. 如果原子中包括元字符,必须在元字符加`'\'`进行转义。 * * * * * ### 元字符种类(共15个) >[info] 元字符尽管看上去很多,其实不少是成对出现,不难记忆,别被吓住了~ | 序号 | 元字符 | 说明 |举例| | :---: | :---: | --- |--- | | 1 | * | 匹配0次、1次或多次前面原子,等价于`{0,} ` | `'/Go*gle/' ` | | 2 | + | 匹配1次或多次前面原子,等价于`{1,} ` | `'/Go+gle/' ` | | 3 | ? | 匹配0次或1次前面原子,等价于`{0,1}` | `'/Go?gle/' ` | | 4 | . | 匹配除换行符之外的任意一个字符 | `'/Go.gle/' ` | | 5 | \| | 匹配2个或多个分支 | `/Google\|Baidu/` | | 6 | {n} | 表示前面原子出现n次 | `/Go{2}gle/` | | 7 | {n,} | 表示前面原子出现不少于n次 | `/Go{2,}gle/` | | 8 | {n,m} | 表示前面原子至少出现n次,最多出现m次 | `/Go{2,5}gle/` | | 9 | ^ | 匹配字符串开始位置 | `/^php/` | | 10 | $ | 匹配字符串开始位置 | `/php$/` | | 11 | \b | 匹配单词边界 | `/\bphp/` | | 12 | \B | 匹配除单词边界以外的部分 | `/\Bphp/` | |13 | [ ] | 匹配方括号内指定的任意一个原子 | `/[aj]sp/` | | 14 | [^ ] | 匹配除方括号内指定原子以外的任意一个原子 |`/[^aj]sp/` | | 15 | ( ) | 匹配其整体为一个原子[模式单元],即多个原子组成的大原子 | `/(Think)+PHP/` | * * * * * ### 模式匹配优先级问题: | 优先级 | 元字符 | 描述 | | :---: | :---: | --- | | 1 | \ | 转义字符 | | 2 | ( ),(?:),(?=),[ ] | 模式单元与原子表 | | 3 | *,+,?,{n},{n,},{n,m} | 重复匹配 | | 4 | ^,$,\b,\B | 边界匹配 | | 5 | \| | 模式选择 | * * * * * ### 实例演示: >[info] 代码说明,都写在注释中了 ~~~ <?php //*匹配前面0次,1次或多次前面原子 echo preg_match('/Go*gle/', 'Ggle') ? '匹配成功<br />' : '匹配失败<br />'; //?匹配0个或1个原子 echo preg_match('/Go?gle/', 'Gogle') ? '匹配成功<br />' : '匹配失败<br />'; //+匹配1个或多个原子 echo preg_match('/Go+gle/', 'Google') ? '匹配成功<br />' : '匹配失败<br />'; //.匹配G和g之间的任意一个字符 echo preg_match('/G.g/', 'Gogle') ? '匹配成功<br />' : '匹配失败<br />'; // | 匹配多个分支 echo preg_match('/google|baidu/', 'baidu') ? '匹配成功<br />' : '匹配失败<br />'; //^设置开头$设置结尾,精确匹配 echo preg_match('/^google$/', 'google') ? '匹配成功<br />' : '匹配失败<br />'; //{n} n表示前面原子出现的次数 echo preg_match('/go{2}gle/', 'google') ? '匹配成功<br />' : '匹配失败<br />'; //{n,} n表示前面原子至少要出现的次数,本例中,字符’o‘至少要出现2次 echo preg_match('/go{2,}gle/', 'gooogle') ? '匹配成功<br />' : '匹配失败<br />'; //{n,m} n表示前面原子至少要出现的次数,m表示最多出现次数,本例中,字符’o‘至少要出现2次,最多5次 echo preg_match('/go{2,5}gle/', 'gooooogle') ? '匹配成功<br />' : '匹配失败<br />'; // \b匹配单词边界,本例 ThinkPHP右边为边界不应再有内容 echo preg_match('/PHP\b/', 'ThinkPHP 5.0') ? '匹配成功<br />' : '匹配失败<br />'; // \B匹配除单词边界以外部分,本例 Think PHP右边不能有边界,左边必须要有边界 echo preg_match('/\bPHP\B/', 'Think PHP5.0') ? '匹配成功<br />' : '匹配失败<br />'; ~~~ * * * * * ### 总结: >[success] 元字符是正规表达式中的一个重点,也是难点,大家多上机练习一下。