PHP头条
热点:

php正则表达式子模式的反向引用学习笔记,正则表达式学习笔记


需要用正则表达式获取字符串的标题。标题标签是h1~h6。
使用正则表达式:"@<h([1-6])>(.*?)</h\\1>@"或者'<h([1-6])>(.*?)</h\1>@'。使用了@作为分隔符,注意单双引号的差别\\1与\1.


例1


 


 代码如下 复制代码 
<?php
$str='<h1>php php php php php php1</h1><h2>php php php php php php2</h2><h3>php php php php php php3</h3><h4>php php php php php php4</h4>';
preg_match_all("@<h([1-6])>(.*?)</h\\1>@",$str,$all);
print_r($all);
?>


结果
Array
(
    [0] => Array
        (
            [0] => <h1>php php php php php php1</h1>
            [1] => <h2>php php php php php php2</h2>
            [2] => <h3>php php php php php php3</h3>
            [3] => <h4>php php php php php php4</h4>
        )


    [1] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
            [3] => 4
        )


    [2] => Array
        (
            [0] => php php php php php php1
            [1] => php php php php php php2
            [2] => php php php php php php3
            [3] => php php php php php php4
        )


)
 


例2


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即模式)




例1:最简单最有用的例子是确定文字中连续出现两个相同单词的位置


 代码如下 复(www.111cn.net)制代码 


<?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:忽略大小写。




例3:


正则表达式的逆向引用($0-99或\\0-99)和子模式以(/()/)开始。
这里$0是全部匹配模式的匹配项。$1是第1个子匹配,$2至$99依次是第2个至第99个子匹配。
用$1-99后向引用子匹配时,如果后面的字符是数字,要用花括号区别开。例:${1}1 。


 代码如下 复制代码 
<?php 
$string = "{April 15, 2003}";


//'w'匹配字母、数字和下划线,'d'匹配0-99数字,'+'匹配重复一次或更多次。
$pattern = "/{(\w+) (\d+), (\d+)}/i"; //在字符串中要搜索的匹配项
$replacement1 = "\${1}1,\$3";
$replacement2 = "\$0";
$replacement3 = "\$1";
$replacement4 = "\$2";
$replacement5 = "\$3";
echo "<BR>";


//字符串被替换为与第n个被捕获的括号内的子模式所匹配的文本
print preg_replace($pattern, $replacement1, $string);
echo "<BR>";
print preg_replace($pattern, $replacement2, $string);
echo "<BR>";
print preg_replace($pattern, $replacement3, $string);
echo "<BR>";
print preg_replace($pattern, $replacement4, $string);
echo "<BR>";
print preg_replace($pattern, $replacement5, $string);
echo "<BR>";


//一般表现形式
print preg_replace("/\w+/i","j",$string);
?>


效果:
April1,2003
{April 15, 2003}
April
15
2003
{j j, j}
 


测试已通过。
from:http://www.111cn.net/phper/210/55602.htm

www.phpzy.comtrue/php/8152.htmlTechArticlephp正则表达式子模式的反向引用学习笔记,正则表达式学习笔记 需要用正则表达式获取字符串的标题。标题标签是h1~h6。 使用正则表达式:"@h([1-6])(.*?)/h\\1@"或者'h([1-6])(.*?)/h\1@'。使...

相关文章

    暂无相关文章
相关频道:

PHP之友评论

今天推荐