正则表达式 (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);