正则表达式 (regular expression) 描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串、将匹配的子串做替换或者从某个串中取出符合某个条件的子串等。
PHP 中我们可以使用 PCRE 扩展来匹配字符串的模式。
PCRE 函数
| 函数 | 描述 |
|---|---|
| preg_filter | 执行一个正则表达式搜索和替换 |
| preg_grep | 返回匹配模式的数组条目 |
| preg_last_error | 返回最后一个PCRE正则执行产生的错误代码 |
| preg_match_all | 执行一个全局正则表达式匹配 |
| preg_match | 执行一个正则表达式匹配 |
| preg_quote | 转义正则表达式字符 |
| preg_replace_callback_array | 执行一个正则表达式搜索并且使用一个回调进行替换 |
| preg_replace_callback | 执行一个正则表达式搜索并且使用一个回调进行替换 |
| preg_replace | 执行一个正则表达式的搜索和替换 |
| preg_split | 通过一个正则表达式分隔字符串 |
正则记录
字符串中文、英文、数字
if (preg_match("/^[\x7f-\xff]+$/", $str)){echo '该字符串全部为中文';}if (preg_match("/^[a-zA-Z\s]+$/", $str)) {echo '该字符串全部为英文';}// PHP自带函数判断eregi('[^\x00-\x7F]', $str ) //中文eregi('[0-9]', $str) //数字eregi('[a-zA-Z]', $str)//英文if (eregi('[^\x00-\x7F]', $str)){echo '该字符串存在中文';}if (eregi('[^\x00-\x7F]', $str) || eregi('[0-9]', $str) || eregi('[a-zA-Z]', $str)){echo '该字符串为中英文数字的并合体';}
清除 h* 标签中的 id
// 原内容: <h1 id="h1-title">test</h1>// 新内容: <h1>test</h1>$html = '<h1 id="h1-title">test</h1>';if (preg_match_all("/<h\d(\sid\=[\d\w\W\s\=\-\"]+)>/U", $html, $array)) {$html = str_replace($array[1], '', $html);}
匹配 img 标签
preg_match_all('/<img(.*?)src=\"(.*?)\"(.*?)>/is', $content, $matches);
img 中添加/编辑属性
$preg = "/<img(.*?)src=\"(.*?)\"(.*?)>/is";if (preg_match($preg, $content)) {$content = preg_replace($preg, '<img class="lazy" data-original="$2" src="/static/images/load/load8.gif" />', $content);}
富文本内容中拿到 color 值
// 搜索内容$content = '<p><b>Specifications:</b></p><p>Color: Navy Blue</p><p>Material: Metal Pole, 180 g/m² Polyester</p><p>Canopy Size: 10'L x 6.5'W (3 x 2 m)</p><p>Height: 7.9 ft (2.4 m)</p><p>Product Weight: 13.7 lb (6.2 kg)</p><p><br></p><p><b>Package Contents:</b></p>';// 输出结果:Color: Navy Blue// 代码示例$preg = "/<p>color(.*?)<\/p>/is";if (preg_match_all($preg, $content, $array)) {$str = 'Color' . $array[1][0];echo $str;}
多个空格转换为一个空格
// 原内容:table table table// 新内容:table table table// 方法1$str = preg_replace('/\s{1,}/', ' ', $str);// 方法2$str = preg_replace("/\s(?=\s)/", "\\1", $str);
