正则表达式 (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 通过一个正则表达式分隔字符串

正则记录

字符串中文、英文、数字

  1. if (preg_match("/^[\x7f-\xff]+$/", $str)){
  2. echo '该字符串全部为中文';
  3. }
  4. if (preg_match("/^[a-zA-Z\s]+$/", $str)) {
  5. echo '该字符串全部为英文';
  6. }
  7. // PHP自带函数判断
  8. eregi('[^\x00-\x7F]', $str ) //中文
  9. eregi('[0-9]', $str) //数字
  10. eregi('[a-zA-Z]', $str)//英文
  11. if (eregi('[^\x00-\x7F]', $str)){
  12. echo '该字符串存在中文';
  13. }
  14. if (eregi('[^\x00-\x7F]', $str) || eregi('[0-9]', $str) || eregi('[a-zA-Z]', $str)){
  15. echo '该字符串为中英文数字的并合体';
  16. }

清除 h* 标签中的 id

  1. // 原内容: <h1 id="h1-title">test</h1>
  2. // 新内容: <h1>test</h1>
  3. $html = '<h1 id="h1-title">test</h1>';
  4. if (preg_match_all("/<h\d(\sid\=[\d\w\W\s\=\-\"]+)>/U", $html, $array)) {
  5. $html = str_replace($array[1], '', $html);
  6. }

匹配 img 标签

  1. preg_match_all('/<img(.*?)src=\"(.*?)\"(.*?)>/is', $content, $matches);

img 中添加/编辑属性

  1. $preg = "/<img(.*?)src=\"(.*?)\"(.*?)>/is";
  2. if (preg_match($preg, $content)) {
  3. $content = preg_replace($preg, '<img class="lazy" data-original="$2" src="/static/images/load/load8.gif" />', $content);
  4. }

富文本内容中拿到 color 值

  1. // 搜索内容
  2. $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>';
  3. // 输出结果:
  4. Color: Navy Blue
  5. // 代码示例
  6. $preg = "/<p>color(.*?)<\/p>/is";
  7. if (preg_match_all($preg, $content, $array)) {
  8. $str = 'Color' . $array[1][0];
  9. echo $str;
  10. }

多个空格转换为一个空格

  1. // 原内容:table table table
  2. // 新内容:table table table
  3. // 方法1
  4. $str = preg_replace('/\s{1,}/', ' ', $str);
  5. // 方法2
  6. $str = preg_replace("/\s(?=\s)/", "\\1", $str);