使用正则表达式突出搜索结果

例:

<style>
	.word-0{ background-color: yellow; }
	.word-1{ border:1px solid red; }
</style>

<?php

header(‘Content-type:text/html;charset=utf-8‘);

/* 标记Web页面 */
$body = ‘
<p>I like pickles and hrrring.</p>
<a href="pickle.php"><img width="200" src="pickle.png">A pickle pic</a>
I have herringbone-patterned toaster cozy.
<herring>Herring is not a real HTML element!</herring>
‘;

$words = array(‘pickle‘, ‘herring‘);
$replacements = array();
foreach($words as $i => $word) {
	$replacements[] = "<span class=‘word-$i‘>$word</span>";
}

// 将页面分解为多个块
// 由看上去类似HTML元素的部分分隔
$parts = preg_split("{(<(?:\"[^\"]*\"|‘[^‘]*‘|[^‘\">])*>)}", $body, -1, PREG_SPLIT_DELIM_CAPTURE);
//var_dump($parts);
/*
array (size=15)
  0 => string ‘
‘ (length=2)
  1 => string ‘<p>‘ (length=3)
  2 => string ‘I like pickles and hrrring.‘ (length=27)
  3 => string ‘</p>‘ (length=4)
  4 => string ‘
‘ (length=2)
  5 => string ‘<a href="pickle.php">‘ (length=21)
  6 => string ‘‘ (length=0)
  7 => string ‘<img width="200" src="pickle.png">‘ (length=34)
  8 => string ‘A pickle pic‘ (length=12)
  9 => string ‘</a>‘ (length=4)
  10 => string ‘
I have herringbone-patterned toaster cozy.
‘ (length=46)
  11 => string ‘<herring>‘ (length=9)
  12 => string ‘Herring is not a real HTML element!‘ (length=35)
  13 => string ‘</herring>‘ (length=10)
  14 => string ‘
‘ (length=2)
*/

foreach($parts as $i => $part) {
	//如果这个部分是HTML元素则跳过
	if(isset($part[0]) && ($part[0] == ‘<‘)) { continue; }
	//将这些单词用<span/>包围起来
	$parts[$i] = str_replace($words, $replacements, $part);
}

$body = implode(‘‘, $parts);

echo $body;

说明:

preg_split() 函数中使用的正则表达式匹配 HTML 标签

<(?:\"[^\"]*\"|‘[^‘]*‘|[^‘\">])*>

可以这样理解:

<                                //开始尖括号
    (?:\                         //任意数量的
        "[^\"]*\"                //双引号字符串
        |                        //或
        ‘[^‘]*‘                  //单引号字符串
        |                        //或
        [^‘\">]                  //除去单引号、双引号和>的其他文本
    )*
>                                //结束尖括号

参考:

<PHP Cookbook>3‘rd

《精通正则表达式》第3版

时间: 2024-12-24 15:12:21

使用正则表达式突出搜索结果的相关文章

(转)使用wildcards(通配符)和regular expressions(正则表达式)搜索

使用wildcards(通配符)搜索   https://wenku.baidu.com/view/5752bd2c2af90242a895e55b.html 使用正则表达式搜索   http://blog.csdn.net/lihuang319/article/details/52670535 使用通配符搜索 使用通配符查找和替换 例如,可用星号 (*) 通配符搜索字符串(使用 "s*d" 将找到 "sad" 和 "started" ). 1.

mysql必知必会--用正则表达式 进行搜索

正则表达式介绍 前两章中的过滤例子允许用匹配.比较和通配操作符寻找数据.对 于基本的过滤(或者甚至是某些不那么基本的过滤),这样就足够了.但 随着过滤条件的复杂性的增加, WHERE 子句本身的复杂性也有必要增加. 这也就是正则表达式变得有用的地方.正则表达式是用来匹配文本 的特殊的串(字符集合).如果你想从一个文本文件中提取电话号码,可 以使用正则表达式.如果你需要查找名字中间有数字的所有文件,可以 使用一个正则表达式.如果你想在一个文本块中找到所有重复的单词, 可以使用一个正则表达式.如果你

第九章 使用正则表达式进行搜索

1.regexp:正则表达式 如上输出: like匹配整列,而regexp在列值内进行匹配,如果被匹配的文本在列值中出现,regexp就会找到它 2.binary:进行区分大小写的匹配 3.进行or匹配 4.匹配指定的字符 通过使用一组[]即可完成特定的字符匹配 相对应的使用[^]可以进行匹配指定字符外的其他任何字符 5.匹配范围 6.匹配特殊字符 使用.可以匹配任意字符 为了匹配那些特殊字符,比如 . [] | - 等需要使用\\来进行转义 7.匹配多个实例 * 0个或多个匹配 + 1个或多个

[MySQL] 用正则表达式进行搜索

正则表达式的作用就是匹配文本,讲一个模式(正则表达式)与一个文本串进行比较. 基本字符匹配 SELECT 列名 FROM 表名 WHERE 列名 REGEXP 条件 ORDER BY 列名; 形式与LIKE相同,只不过REGEXP后面跟的条件为正则表达式. 差别: LIKE匹配整个列.如果被匹配的文本在列值中出现,LIKE不会找到它,相应的行也不会被返回(除非使用通配符). REGEXP在列值内进行匹配,如果被匹配的文本在列值中出现,REGEXP会找到它,相应的行将被返回. 正则表达式不区分大小

php 中preg_replace执行一个正则表达式的搜索和替换

preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] ) 在subject中搜索pattern, 以replacement进行替换.

第九章:用正则表达式进行搜索

@author: Tobin @date: 2019/10/28 19:51:40 MySQL仅支持多数正则表达式实现的一个很小的子集. # 检索列prod_name包含文本1000的所有行 SELECT prod_name FROM products WHERE prod_name REGEXP '1000' ORDER BY prod_name; # 这里注意和LIKE的差别.LIKE匹配'1000'是全匹配.必须等于1000才返回值.而REGEXP是只要包含1000就可以. # 匹配任意一

正则表达式-将搜索结果高亮

模拟: 将要查找的字符串中,指定字符替换为高亮的字符: 方法一: package com.java.regex; import java.util.regex.Matcher; import java.util.regex.Pattern; public class HighLight { public static void main(String[] args) { String keyword = "a"; String regexp = keyword + "+&qu

文本搜索之grep、egrep、egrep以及正则表达式

一.grep.egrep.fgrep命令 说明:本文在CentOS 6.6 X86_64系统下grep.egrep.fgrep命令和正则表达式的基本参数和使用格式.方法. 1.1.基本定义: grep(Global search Regular Expression ) and Print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它只能使用基本的正则表达式来搜索文本,并把匹配的行打印出来. grep是很常见也很常用的命令,它的主要功能是进行字符串数据

前端学PHP之正则表达式函数

前面的话 正则表达式不能独立使用,它只是一种用来定义字符串的规则模式,必须在相应的正则表达式函数中应用,才能实现对字符串的匹配.查找.替换及分割等操作.前面介绍了正则表达式的基础语法,本文将详细介绍正则表达式函数 匹配与查找 [preg_match()] preg_match()函数用来执行一个正则表达式匹配,搜索subject与pattern给定的正则表达式的一个匹配.返回pattern的匹配次数.它的值将是0次(不匹配)或1次,因为preg_match()在第一次匹配后将会停止搜索.preg