正则表达式怎样匹配多个单词


\b”是正则表达式的一个元字符(Metacharacter),代表着单词的开头或结尾,也就是单词的分界处。匹配单词需要使用到它。

1、匹配单个单词

匹配单个单词只要在单词的头尾分别加上“\b”元字符就可以了,以匹配“span”单词为例:

\bspan\b

2、匹配多个单词

\b(a|strong|img)\b

3、分组中匹配多个单词

正则表达式中,用小括号来指定分组(也叫子表达式),用于一次匹配多个结果。

以一段 PHP 代码为例,将一段 HTML 代码字符串中的 a、strong 和 img 标签的尖括号“<>”替换成大括号“[]”:

$ret = '<div style="font-size: 12px;">测试</div>
<div><img src="http://localhost/images/star.png"/></div>
<div><strong>下载</strong>:<a href="http://localhost/upload/star.zip">star.zip</a></div>' ;

$ret = preg_replace( '/(<)(\/?)(\b(a|strong|img)\b)(([^>]*?)?)(>)/ims' , '[$2$3$5]', $ret);

echo $ret;

输出的结果为:

<div style="font-size: 12px;">测试</div>
<div>[img src="http://localhost/images/star.png"/]</div>
<div>[strong]下载[/strong]:[a href="http://localhost/upload/star.zip"]star.zip[/a]</div>

我们来分析一下这段代码中使用的表达式:

(<)(\/?)(\b(a|strong|img)\b)(([^>]*?)?)(>)

有几对括号就有几个分组,分组的顺是从左到右,从外到内。这个表达式一共有7个分组:

(<)
(\/?)
(\b(a|strong|img)\b)
(a|strong|img)
(([^>]*?)?)
([^>]*?)
(>)

以 HTML 代码中的 <a href="http://localhost/upload/star.zip"> 标签为例,被分成7份,用 $n 的格式来标记,其中 NULL 表示空字符串:

$1=<
$2=NULL
$3=a
$4=a
$5= href="http://localhost/upload/star.zip"
$6= href="http://localhost/upload/star.zip"
$7=>

将其中的尖括号<>替换为中括号[],按格式 '[$2$3$5]'  重新拼接起来的结果如下: 

[a href="http://localhost/upload/star.zip"]

前一篇:
后一篇:

发表评论