如何用PHP正则表达式提取长尾词的中的子模式?
- 内容介绍
- 文章标签
- 相关推荐
本文共计3444个文字,预计阅读时间需要14分钟。
正则表达式的一个关键特性是将匹配成功的模式的部分进行存储。使用这种模式,可以将匹配到的某部分内容存储起来,以便后续使用。对于正则表达式模式或部分模式,通过在两边添加圆括号(),可以将这部分内容存储到临时变量中,从而实现临时存储。
正则表达式一个最重要的特性就是将匹配成功的模式的某部分进行存储供以后使用这一能力。对一个正则表达式模式或部分模式两边添加圆括号()可以把这部分表达式存储到一个临时缓冲区中。
所捕获的每个子匹配都按照在正则表达式模式中从左至右所遇到的内容按顺序存储。
存储子匹配的缓冲区编号从1开始,连续编号至最大99个子表达式。
每个缓冲区都可以使用'\n'(或用'$n')访问,其中n为1至99的阿拉伯数字,用来按顺序标识特定缓冲区(子表达式)。
例1:最简单最有用的例子是确定文字中连续出现两个相同单词的位置
复制代码 代码如下:
<?php
$string = "Is is the cost of of gasoline going up up";
$pattern = "/\b([a-z]+) \\1\b/i"; //这里的\\1不能使用\$1或$1
$str = preg_replace($pattern, "\\1", $string); //这里的\\1可以使用\$1或$1,引用第一个子匹配
echo $str; //效果是Is the cost of gasoline going up
?>
例中的子表达式就是圆括号内的项。\b匹配单词的开始或结束。+匹配重复一次或更多次。
该子表达式匹配的是一个或多个字母字符的单词,即由'[a-z]+'匹配的。
该正则表达式的第二部分是对前面所捕获的子匹配的引用,也就是由附加表达式所匹配的第二次出现的单词,用'\\1'来引用第一个子匹配,第一个\是转义符。
i是正则表达式中的修正符。i:忽略大小写。
例2:
正则表达式的逆向引用($0-99或\\0-99)和子模式以(/()/)开始。
这里$0是全部匹配模式的匹配项。$1是第1个子匹配,$2至$99依次是第2个至第99个子匹配。
用$1-99后向引用子匹配时,如果后面的字符是数字,要用花括号区别开。例:${1}1 。
函数
mixed preg_replace ( mixed pattern, mixed replacement, mixed subject [, int limit])
功能
在 subject 中搜索 pattern 模式的匹配项并替换为 replacement。如果指定了 limit,则仅替换 limit 个匹配,如果省略 limit 或者其值为 -1,则所有的匹配项都会被替换。
replacement可以包含\\n形式或$n形式的逆向引用,n可以为0到99,\\n表示匹配pattern第n个子模式的文本,\\0表示匹配整个pattern的文本。
子模式
$pattern参数中被圆括号括起来的正则表达式,子模式的数目即从左到右圆括号的数目。(pattern即模式)
例子
复制代码 代码如下:
<?php
$time=date("Y-m-d H:i:s");
$pattern = "/(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})/i";
$replacement = "\$time格式为:$0<BR>替换后的格式为:$1年$2月$3日 $4时$5分$6秒";
print preg_replace($pattern, $replacement, $time);
?>
输出:
$time格式为:2011-07-25 17:59:26
替换后的格式为:2011年07月25日 17时59分26秒
附正则表达式符号对照表
本文共计3444个文字,预计阅读时间需要14分钟。
正则表达式的一个关键特性是将匹配成功的模式的部分进行存储。使用这种模式,可以将匹配到的某部分内容存储起来,以便后续使用。对于正则表达式模式或部分模式,通过在两边添加圆括号(),可以将这部分内容存储到临时变量中,从而实现临时存储。
正则表达式一个最重要的特性就是将匹配成功的模式的某部分进行存储供以后使用这一能力。对一个正则表达式模式或部分模式两边添加圆括号()可以把这部分表达式存储到一个临时缓冲区中。
所捕获的每个子匹配都按照在正则表达式模式中从左至右所遇到的内容按顺序存储。
存储子匹配的缓冲区编号从1开始,连续编号至最大99个子表达式。
每个缓冲区都可以使用'\n'(或用'$n')访问,其中n为1至99的阿拉伯数字,用来按顺序标识特定缓冲区(子表达式)。
例1:最简单最有用的例子是确定文字中连续出现两个相同单词的位置
复制代码 代码如下:
<?php
$string = "Is is the cost of of gasoline going up up";
$pattern = "/\b([a-z]+) \\1\b/i"; //这里的\\1不能使用\$1或$1
$str = preg_replace($pattern, "\\1", $string); //这里的\\1可以使用\$1或$1,引用第一个子匹配
echo $str; //效果是Is the cost of gasoline going up
?>
例中的子表达式就是圆括号内的项。\b匹配单词的开始或结束。+匹配重复一次或更多次。
该子表达式匹配的是一个或多个字母字符的单词,即由'[a-z]+'匹配的。
该正则表达式的第二部分是对前面所捕获的子匹配的引用,也就是由附加表达式所匹配的第二次出现的单词,用'\\1'来引用第一个子匹配,第一个\是转义符。
i是正则表达式中的修正符。i:忽略大小写。
例2:
正则表达式的逆向引用($0-99或\\0-99)和子模式以(/()/)开始。
这里$0是全部匹配模式的匹配项。$1是第1个子匹配,$2至$99依次是第2个至第99个子匹配。
用$1-99后向引用子匹配时,如果后面的字符是数字,要用花括号区别开。例:${1}1 。
函数
mixed preg_replace ( mixed pattern, mixed replacement, mixed subject [, int limit])
功能
在 subject 中搜索 pattern 模式的匹配项并替换为 replacement。如果指定了 limit,则仅替换 limit 个匹配,如果省略 limit 或者其值为 -1,则所有的匹配项都会被替换。
replacement可以包含\\n形式或$n形式的逆向引用,n可以为0到99,\\n表示匹配pattern第n个子模式的文本,\\0表示匹配整个pattern的文本。
子模式
$pattern参数中被圆括号括起来的正则表达式,子模式的数目即从左到右圆括号的数目。(pattern即模式)
例子
复制代码 代码如下:
<?php
$time=date("Y-m-d H:i:s");
$pattern = "/(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})/i";
$replacement = "\$time格式为:$0<BR>替换后的格式为:$1年$2月$3日 $4时$5分$6秒";
print preg_replace($pattern, $replacement, $time);
?>
输出:
$time格式为:2011-07-25 17:59:26
替换后的格式为:2011年07月25日 17时59分26秒
附正则表达式符号对照表

