元字符 | 描述 | 示例 |
---|---|---|
. | 匹配任意单个字符。 | 正则表达式 a.c 可以匹配 aac,a2c,a#c 等 |
$ | 匹配字符串的结尾。 | 正则表达式 abc$ 可以匹配最后以 abc 结尾的字符串 |
^ | 匹配字符串的开始。 | 正则表达式 ^what 可以匹配以 what 开始的字符串 |
* | 匹配 * 前面的子串零次或多次 | 正则表达式 abc*d 可以匹配 abcd、aad、bd、bcd、d等字符串 |
+ | 匹配 * 前面的子串一次或多次 | 正则表达式 abc*d 可以匹配 abcd、aad、bd、bcd等字符串 |
{i} | 匹配指定个数的字符 | 正则表达式 [0-9]{11} 可以匹配由11个数字字符组成的字符串 |
{i1,2} | 匹配个数在i1到i2范围的字符 | 正则表达式 [0-9]{8,11} 可以匹配由8-11个数字字符组成的字符串 |
\ | 转义符,将字符串中的元字符当作普通的字符匹配 | 正则表达式 \*a 匹配 *a |
[ ] | 匹配[]中的任何一个字符 | 正则表达式 [ab]c 可以匹配 ac、bc |
[c1-c2] | 在[]中使用连字符‘-’指定字符的区间 | 正则表达式 [0-9] 可以匹配任何数字字符 |
[^c1-c2] | 匹配除了[]中的任意字符 | 正则表达式 [^0-9] 匹配除了数字字符之外的任意字符 |
( ) | 用于定义匹配的子模式 | |
| | 从多个选项中选择一个进行匹配 | 正则表达式 (a|b|c) 可以匹配 a、b、c |
----------------------------------------------------------------------------------------------------------------------------------|选择分支(或),注意使用”[]“与”|”的区别,在于”[]“只能匹配单个字符,而”|“可以匹配任意长度的字符串,例如要匹配com、edu或net就可以写作com|edu|net。(.)匹配任意一个字符,但是当.在字符类([]中的内容)的开始或结尾时就只能是.。^在[]外表示从这开始,在括号内表示不包括,例如[^1-5],该字符不是1~5之间的数字。$表示到这结束,例如"^[A-Za-z]+$"表示由26个英文字母组成的字符串 。
判断字符串”I am a good boy“中是否包含单词go,可以使用\bgo\b,确保匹配的是一个完整的单词而不是单词的一部分。在字符串”I am a good boy“中没有单词go,使用\bgo\b就会提示匹配不到,而不使用\b就会匹配到”I am a good boy“。还有与之对应的\B意思相反。
在php正则表达式中,通过\n,来表示第n次匹配到的结果。如\5代表第五次匹配到的结果。
----------------------------------------------------------------------------------------------------------------------------------
不使用正则匹配的strstr函数
strstr() 函数搜索字符串在另一字符串中的第一次出现。
注释:该函数是二进制安全的。
注释:该函数对大小写敏感。如需进行不区分大小写的搜索,请使用 stristr() 函数。
注释:返回值是从搜索到的字符串到最后
不使用正则匹配的strpos函数
strpos() 函数查找字符串在另一字符串中第一次出现的位置。
注释:strpos() 函数对大小写敏感。(stripos不区分大小写,strrpos~最后一次~区分大小写,strripos不区分大小写)
注释:该函数是二进制安全的。
使用正则匹配的preg_math()和preg_match_all函数
preg_match() 第一次匹配成功后就会停止匹配,所以返回值为0或1。如果要实现全部结果的匹配,即搜索到结尾处,则需使用 preg_match_all() 函数。
preg_match("/php/", "php php php php php.", $matches);
print_r($matches);
preg_match_all("/php/", "php php php php php.", $matches);
print_r($matches);
对应的输出
Array
(
[0] => php
)
Array
(
[0] => Array
(
[0] => php
[1] => php
[2] => php
[3] => php
[4] => php
)
)
php中贪婪匹配与惰性匹配
- 贪婪匹配:匹配尽可能多的字符。
比如,正则表达式中m.*n,它将匹配最长以m开始,n结尾的字符串。如果用它来搜索manmpndegenc的话,它将匹配到的字符串是manmpndegen而非man。可以这样想,当匹配到m的时候,它将从后面往前匹配字符n。 - 懒惰匹配:匹配尽可能少的字符。
在后面添加一个”?”可将贪婪匹配转变成懒惰匹配。如m.*?n匹配到的字符串是man。
----------------------------------------------------------------------------------------------------------------------------------
最后我要吐槽一下php正则表达式对于我这种笨笨的初学者来说真的好难,读一遍头都大,而且一脸懵逼