如何在PHP中使用正则表达式查找和替换
1。preg_match执行正则表达式匹配国际preg_match(字符串的模式字符串$ {数组$matches { int,int = 0美元标志{,} } }偏移= 0美元)
搜索主题与正则表达式之间的匹配。
模式:
要搜索的模式,字符串类型。
主题:
输入的字符串。
比赛:
如果提供了参数匹配,它将作为搜索结果填充。$匹配{ 0 }将包含完整模式匹配的文本,而$匹配{ 1 }将包含第一捕获子群匹配的文本,等等。
旗帜:
标志可设置为以下值:如果preg_offset_capture标记通过标签的字符串偏移量(相对于目标字符串)将被添加为每个匹配返回。注意:这将改变阵列填充匹配参数,使每一个元素的字符串是由零元素相匹配,与第一个元素是在目标字符串匹配字符串的偏移问题。
偏移:
通常,搜索从目标字符串的开头开始。可选参数偏移用于指定目标字符串未知起始处的搜索(单位是字节)。
返回值:
preg_match()返回的时候,模式匹配的数量。它的数值是0(不匹配)或1倍,因为preg_match()将停止搜索后第一场比赛。与此不同,preg_match_all()将搜索对象直至结束。如果有错误preg_match()返回false。
实例:
复制代码代码如下所示:
< PHP
*
*模式分隔符后面的i标记是不敏感搜索的情况。
*将输出:1
* /
回声preg_match( / *(PHP) /
。;
*
*将输出:数组({ 0 },1)
* /
$ =数组();
preg_match( / *(PHP) /
print_r($匹配);
。;
*
*将输出:数组({ 0 } =数组({ 0 } >,PHP 1 } = 11){ 1 } =数组)({ 0 } = PHP 1 { } = 13)
* /
preg_match( / *(PHP) /
print_r($匹配);
。;
*
*将输出:数组({ 0 } =数组({ 0 } = E=PHP 1 { }=63){ 1 } })数组({ 0 } > PHP { 1 } = 65)
* /
(preg_match / A-Z } *,(PHP) /
print_r($匹配);
。;
>
2.preg_match_all执行全局正则表达式匹配
国际preg_match_all(字符串的模式字符串$ {数组$matches { int,int = preg_pattern_order美元标志{ 0 } },抵消美元= })
在主题中搜索所有匹配模式正则表达式的匹配结果,并将它们输出到按指定的顺序排列的匹配项。在找到第一个匹配之后,子序列继续从最后一个匹配位置搜索。
模式:
要搜索的模式,字符串形式。
主题:
输入的字符串。
比赛:
一个多维数组,输出所有匹配结果作为输出参数,数组排序由标志指定。
旗帜:
你可以使用下面的标记(注意不能使用preg_pattern_order和preg_set_order同时)。如果没有给定的排序标志,认为这将preg_pattern_order。
preg_pattern_order:
结果是所有匹配$ { 0 }的匹配都保存完整的模式,而匹配{ 1 }保存第一个子组的所有匹配,等等。
preg_set_order:
结果被列为匹配{ 0 },其中包含第一个匹配得到的所有匹配(包括子组),而匹配{ 1 }是包含匹配第二次的所有匹配(包括子组)的数组,等等。
preg_offset_capture:
如果标签是通过相关的目标字符串的偏移量将增加比赛时每发现返回。注意,这将改变每一个匹配结果字符串元素的匹配,使匹配结果字符串的零元素,与第一个元素匹配结果的字符串的偏移问题。
返回值:
返回完整匹配的数目(可能是0),如果出现错误返回false。
实例:
复制代码代码如下所示:
< PHP
*
*将输出:2
* /
Echo preg_match_all (/php/i
。;
*
*将输出:数组({ 0 },1)
* /
$ =数组();
(preg_match / A-Z } *,(PHP) /
print_r($匹配);
。;
*
*将输出:数组({ 0 } =数组({ 0 } = >,PHP 1 { = e=PHP){ 1 } >数组)({ 0 { } 1)
* /
$ =数组();
(preg_match_all / A-Z } *,(PHP) /
print_r($匹配);
。;
*
*将输出:数组({ 0 } =数组({ 0 } = >数组({ 0 } = >,PHP 1 { = 11){ 1 } { 13 })({ 0 } = { 1 } } = 13)){ 1 } =数组({ 0 } = >数组({ 1 } = > 3))。
* /
$ =数组();
(preg_match_all / A-Z } *,(PHP) /
print_r($匹配);
。;
*
*数组({ 0 } =数组({ 0 } = 1)1)63({ 0 } > 1 } > 65)
* /
$ =数组();
(preg_match_all / A-Z } *,(PHP) /
print_r($匹配);
。;
>
3.preg_split分离通过正则表达式的字符串
阵列preg_split(字符串的字符串模式,$ { int,int = 1美元限制{,旗帜= 0美元)
给定字符串由正则表达式分隔。
模式:
搜索模式,字符串的形式。
主题:
输入的字符串
极限:
如果指定的子字符串是唯一的限制,限制,和返回的最后一个子字符串将包含所有剩余的部分。极限值为1, 0或为空,这表示无限制。作为PHP的标准,可以使用null跳过标志的设置。
旗帜:
标志可以是以下标记的任何组合(使用按位或|组合):
preg_split_no_empty:
如果这个标签设置,preg_split()将分离后返回非空的部分。
preg_split_delim_capture:
如果设置了此标记,则将在分离模式中插入和返回括号表达式。
preg_split_offset_capture:
如果设置了此标志,则匹配的每一个事件都将返回额外的字符串偏移量。注意:这将改变数组中的每个元素的回归,使得由零元素的子串的主题偏移的第一元素的字符串数组的每个元素分离后一。
返回值:
返回子串,图案边界分离后得到的数组对象。
实例:
复制代码代码如下所示:
< PHP
*
*将输出:
*数组({ 0 } },在点,{ 1 })是Web脚本语言=选择。我爱= { 2 })
* /
$ =数组();
print_r(preg_split ( / /我的PHP
。;
*
*将输出:
*数组({ 0 } },在点,{ 1 })是Web脚本语言=选择。我喜欢php)
* /
$ =数组();
print_r(preg_split ( / /我的PHP
。;
*
*将输出:
*数组({ 0 } },在点,{ 1 })是Web脚本语言=选择。我的爱)
* /
$ =数组();
print_r(preg_split ( / /我的PHP
。;
>
4.preg_quote逃生的正则表达式字符
preg_quote字符串(字符串str字符串分隔符= null {,})
preg_quote()需要一个参数str和添加一个反斜杠在每个正则表达式语法的特征。这通常是当你有一些运行时字符串需要匹配正则表达式。
正则表达式是:特殊字符。 * { } { } = $(^):- |!
Str:
输入的字符串
Delimiter:
如果可选的参数指定的分隔符,它也会逃跑。这通常是用来逃避由PCRE函数使用的分隔符。/是最常见的分隔符。
返回值:
转义后返回字符串。
实例:
复制代码代码如下所示:
< PHP
/ /在这种情况下,preg_quote(合字)用于保持星号的本义,不使用正则表达式的特殊语义。
textbody美元=这本书是非常难找到的;
$单词*非常*;
textbody美元= preg_replace( / 。preg_quote(合字)。
这本书很难输出,这很难找到。
回声htmlspecialchars($ textbody);
>
5.preg_grep返回的数组项匹配模式
阵列preg_grep(字符串的模式,输入{ int数组,$标志= 0 })
返回与给定数组输入中的模式模式相匹配的元素数组。
模式:
要搜索的模式,字符串形式。
输入:
输入数组。
旗帜:
如果设置为preg_grep_invert,这个函数返回给定元素不匹配模式输入数组中的数组。
返回值:
返回在输入中使用键作为索引的数组。
实例:
复制代码代码如下所示:
< PHP
数组=
返回都包含一个浮点元素。
输出:数组({ 3 } = 123.22 { 5 } = 33.2 { 6 } = 0.22)
fl_array美元= preg_grep( / ^( D +) D + $ /,数组);
print_r($ fl_array);
返回都包含一个浮点元素。
输出: / /阵列({ 0 } = > ABC { 1 } = > DD { 2 } = 123 { 4 } = word123)
fl_array美元= preg_grep( / ^( D +) D + $ /,数组,preg_grep_invert);
print_r($ fl_array);
>
6.preg_replace搜索和替换正则表达式
混合preg_replace(混合模式混合替代美元,美元,美元,美元的混合主体{ int,极限= 1 { int,$count )
搜索主题的一部分以匹配模式,并用替换的方式替换它。
模式:
模式搜索。它可以是一个字符串或字符串数组,你可以使用一些PCRE的改性剂,including'e(preg_replace_eval),可为该函数指定。
置换:
用于替换字符串或字符串数组。如果这个参数是一个字符串,和模式是一个数组,所有的模式都与此字符串替换。如果两模式更换阵列,每个模式是在更换相应元件更换。如果在替换元素低于模式多出的图案是一个空字符串替换。替换可以包括一个反向参考或(PHP 4.0.4以上可用)$ N,后者是首选的语法。每一个这样的参考,将匹配的捕获组捕获的文本替换。可以是0-99, 0,和0美元代表了完整的模式匹配的文本。对捕获分组序列的数量是:1表示从左到右的捕获组,左括号的数目。如果你想更换使用反斜杠,你必须用4(
当在替换模式下工作时,在引用之后,后面是另一个数字。例如,在一个匹配的模式被添加到原来的号码, 1不能用于描述向后引用。例如 11会让preg_replace()无法理解。您需要的是1个向后引用,后面是一个文本1或一个11向后引用。在这种情况下,解决方案是使用$ 1 } 1。
这将创建一个独立的1美元的后向引用,一个独立的原1。当E改性剂使用,功能会逃避一些字符(即,当这些都完成后,请确保没有单引号或者双引号语法错误(如as'strlen(1元strlen()+2美元)解析后的参考。确保字符串语法符合PHP与eval语法一致。因为在更换完毕,
发动机将使用结果字符串作为PHP代码使用eval计算并最终参与替换字符串中返回的返回值。
主题:
要搜索和替换的字符串或字符串数组。如果主题是数组,则搜索并替换回主题的每一个元素,返回值也将是数组。
极限:
每个主题替换每个模式的最大次数。默认值是- 1(无穷大)。
计数:
如果指定,它将被填充以完成替换的数量。
返回值:
如果对象是一个数组,preg_replace()返回一个数组,然后返回一个字符串在其他情况下,如果发现匹配,更换主题是回来了,而在其他情况下,主体还没有变化。如果出现错误,返回null。
实例:
使用向后引用跟随原始值:
复制代码代码如下所示:
< PHP
15, 2003美元=四弦;
*
*字符重复一次或多次
* + +号重复一次或多次
*我忽略了这个案例。
* /
$模式(= +)( +),( +) i;
*
* 0美元完成模式匹配文本
* { 1 } 1第一个括号中的模式匹配文本,并在括号后面加1。
模式匹配文本在第三个圆括号中的3
* /
$替换= $ 0:{ 1 } } 1, 3;
回声preg_replace(合模式,取代美元,美元的字符串);
>
索引数组的preg_replace():
复制代码代码如下所示:
这只敏捷的棕色狐狸跳过了那只懒狗;
$ =数组();
$模式{ 0 };
$模式{ 1 } = ;
$模式{ 2 };
$替换=数组();
$替换{ 2 } =熊只的;
$替换{ 1 } =;
$替换{ 0 } = '慢';
输出:黑熊将缓慢地跃过懒惰的狗。
回声preg_replace(合模式,替代美元,为字符串);
在模式和内容/替换排序时,我们可以按键得到预期的结果。
Ksort(元模式);
Ksort($替换);
输出:缓慢的黑色 /将承担跳过懒惰的狗。
回声preg_replace(合模式,替代美元,为字符串);
替换一些值:
复制代码代码如下所示:
< PHP
($模式=阵列/(19 | 20)( D { 2 })-( D {1,2})-( D {1,2}),
{();
替换=数组(3 1 2= 1);
回声preg_replace(合模式,取代美元,{ } = 1999-5-27日期);
>
使用modifier'e:
复制代码代码如下所示:
< PHP
html_body美元=你好;
将输出:您好
回声htmlspecialchars(preg_replace( /(} * >) /
‘ 1。strtoupper( 2)。'%s' 3
html_body美元))
>
剥去空白字符:
复制代码代码如下所示:
< PHP
$str = 'foo O;
$str = preg_replace( / / S +,,$str);
将更改
回声$;
>
使用参数计数:
复制代码代码如下所示:
< PHP
$=0;
回声preg_replace(array( / / /、 ),'xp 4',1,美元计算);
/ / preg_replace等于回波( / D | ,'xp',4',1美元算);
回声计数;3
>
7.preg_replace_callback执行正则表达式搜索和使用回调来取代它
混合(混合模式preg_replace_callback美元美元美元,可调用回调,混合主体{ int,达极限= 1 { int,$count )
除了指定一个回调而不是为了替代计算字符串替换,后者相当于preg_replace()。
模式:
要搜索的模式可以生成字符串或字符串数组。
回调:
每次需要替换时调用的回调函数。调用时函数获得的参数是与主题相匹配的结果。回调函数返回一个真正参与替换的字符串。
你可能经常需要一个回调函数只能在一个地方preg_replace_callback()。在这种情况下,你可以使用匿名函数来定义一个匿名函数作为回调时preg_replace_callback()调用被调用。这样,你可以把所有的电话信息在同一位置,不污染函数命名空间的因为一个不在别处使用回调函数的名字。
主题:
搜索替换的目标字符串或字符串数组。
极限:
每个主题字符串使用的每个模式的最大可替换次数。默认值是- 1(无限制)。
计数:
如果指定,这个变量将被填充到替换的数量。
实例:
preg_replace_callback()和()create_function:
复制代码代码如下所示:
< PHP
一年中增加的文本。
$四月愚人节是04 01 2002 ;
最后一个圣诞节是12 24 2001;
返回函数
功能next_year($匹配)
{
{ $匹配{ 0 }已完成,通常:
$匹配{ 1 }是第一个捕获子组匹配。
等
返回$匹配{ 1 }。($匹配{ 2 } + 1);
}
*将输出:
*四月愚人节是04 01 2003
*去年圣诞节是12 24 2002
* /
回声preg_replace_callback(
|( D { 2 } / D { 2 } /)( D { 4 })|
next_year
文本$);
/ / create_function
回声preg_replace_callback(
|( D { 2 } / D { 2 } /)( D { 4 })|
create_function(
火柴,
返回$匹配{ 1 }。($匹配{ 2 } + 1);
),
文本$);
>