正则表达式备忘录A

版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章原始出版、作者信息和本声明。否则将追究法律责任。http://blog.csdn.net/mayongzhan - 马永占,myz,mayongzhan
留下备忘一下...
preg_grep — 返回与模式匹配的数组单元
preg_last_error — Returns the error code of the last PCRE regex execution
preg_match_all — 进行全局正则表达式匹配
preg_match — 进行正则表达式匹配
preg_quote — 转义正则表达式字符
preg_replace_callback — 用回调函数执行正则表达式的搜索和替换
preg_replace — 执行正则表达式的搜索和替换
preg_split — 用正则表达式分割字符串
----------------------------------------------------------------------
TEST:
/**
* @name regular_preg.php
* @date Mon Jun 16 19:06:28 CST 2008
* @copyright 马永占(MyZ)
* @author 马永占(MyZ)
* @link http://blog.csdn.net/mayongzhan/
*/
$a = array('myz','123','mayongzhan','','blog.csdn.net/mayongzhan');
$b = 'myz123mayongzhan456 myzhan84m9999 blog.csdn.net/mayongzhan';
$c = ' s . \ + * ? [ ^ ] $ ( ) { } = ! < > | : ';
echo 'a:<br />';
print_r($a);
echo '<br /><br />b:<br />'.$b;
echo '<br /><br />c:<br />'.$c;
echo '<br /><br />---------------------------';
echo '<br /><br />preg_grep<br />';
echo '<br /><br />$a<br />';
echo '<br /><br />/^m/<br />';
print_r(preg_grep('/^m/',$a));
echo '<br /><br />/a/<br />';
print_r(preg_grep('/a/',$a));
echo '<br /><br />/a/ PREG_GREP_INVERT<br />';
print_r(preg_grep('/a/',$a,PREG_GREP_INVERT));
echo '<br /><br />string<br />';
print_r(preg_grep('/a/',$a,PREG_GREP_INVERT));
echo '<br /><br />---------------------------';
echo '<br /><br />preg_match_all<br />';
echo '<br /><br />$b<br />';
echo '<br /><br />/[a-z]([0-9])/ PREG_PATTERN_ORDER<br />';
unset($match);
preg_match_all('/[a-z]([0-9])/',$b,$match);
print_r($match);
echo '<br /><br />/[a-z]([0-9])/ PREG_SET_ORDER <br />';
unset($match);
preg_match_all('/[a-z]([0-9])/',$b,$match,PREG_SET_ORDER);
print_r($match);
echo '<br /><br />/[a-z]([0-9])/ PREG_OFFSET_CAPTURE <br />';
unset($match);
preg_match_all('/[a-z]([0-9])/',$b,$match,PREG_OFFSET_CAPTURE);
print_r($match);
echo '<br /><br />---------------------------';
echo '<br /><br />preg_match<br />';
echo '<br /><br />$b<br />';
echo '<br /><br />/[0-9]([a-z])/<br />';
unset($match);
preg_match_all('/[0-9]([a-z])/',$b,$match);
print_r($match);
echo '<br /><br />/[0-9]([a-z])/ PREG_OFFSET_CAPTURE <br />';
unset($match);
preg_match_all('/[0-9]([a-z])/',$b,$match,PREG_OFFSET_CAPTURE);
print_r($match);
echo '<br /><br />---------------------------';
echo '<br /><br />preg_quote<br />';
echo '<br /><br />$c<br />';
echo '<br /><br />s<br />';
echo $c.'<br />';
echo preg_quote($c,'s');
echo '<br /><br />---------------------------';
echo '<br /><br />preg_replace_callback<br />';
echo '<br /><br />$b<br />';
echo '<br /><br />/myz/<br />';
function testF($matches)
{
return 'a'.substr($matches[0],1);
}
echo preg_replace_callback('/myz/','testF',$b);
echo '<br /><br />---------------------------';
echo '<br /><br />preg_replace<br />';
echo '<br /><br />$b<br />';
echo '<br /><br />/myz/<br />';
echo preg_replace('/myz/','MYZ',$b);
echo '<br /><br />---------------------------';
echo '<br /><br />preg_split<br />';
echo '<br /><br />$b<br />';
echo '<br /><br />/myz/ limit 3<br />';
print_r(preg_split('/myz/',$b,2));
echo '<br /><br />/myz/ PREG_SPLIT_NO_EMPTY<br />';
print_r(preg_split('/myz/',$b,-1,PREG_SPLIT_NO_EMPTY));
echo '<br /><br />/myz/ PREG_SPLIT_NO_EMPTY<br />';
print_r(preg_split('/myz([0-9])/',$b,-1,PREG_SPLIT_DELIM_CAPTURE|PREG_SPLIT_NO_EMPTY));
echo '<br /><br />/myz/ PREG_SPLIT_NO_EMPTY<br />';
print_r(preg_split('/myz([0-9])/',$b,-1,PREG_SPLIT_OFFSET_CAPTURE|PREG_SPLIT_DELIM_CAPTURE|PREG_SPLIT_NO_EMPTY));
?>
----------------------------------------------------------------------
array preg_grep ( string $pattern , array $input [, int $flags ] )
flags 可以是以下标记:
PREG_GREP_INVERT
如果传递入此标记,preg_grep() 会返回输入数组中不匹配给定 pattern 的单元。本标记自 PHP 4.2.0 起可用。
----------------------------------------------------------------------
int preg_last_error ( void )
----------------------------------------------------------------------
int preg_match_all ( string $pattern , string $subject , array $matches [, int $flags ] )
flags 可以是下列标记的组合(注意把 PREG_PATTERN_ORDER 和 PREG_SET_ORDER 合起来用没有意义):
PREG_PATTERN_ORDER
对结果排序使 $matches[0] 为全部模式匹配的数组,$matches[1] 为第一个括号中的子模式所匹配的字符串组成的数组,以此类推。
PREG_SET_ORDER
对结果排序使 $matches[0] 为第一组匹配项的数组,$matches[1] 为第二组匹配项的数组,以此类推。
本例中,$matches[0] 是第一组匹配结果,$matches[0][0] 包含匹配整个模式的文本,$matches[0][1] 包含匹配第一个子模式的文本,以此类推。同样,$matches[1] 是第二组匹配结果,等等。
PREG_OFFSET_CAPTURE
如果设定本标记,对每个出现的匹配结果也同时返回其附属的字符串偏移量。注意这改变了返回的数组的值,使其中的每个单元也是一个数组,其中第一项为匹配字符串,第二项为其在 subject 中的偏移量。本标记自 PHP 4.3.0 起可用。
如果没有给出标记,则假定为 PREG_PATTERN_ORDER。
返回整个模式匹配的次数(可能为零),如果出错返回 FALSE。
----------------------------------------------------------------------
int preg_match ( string $pattern , string $subject [, array $matches [, int $flags ]] )
flags 可以是下列标记:
PREG_OFFSET_CAPTURE
如果设定本标记,对每个出现的匹配结果也同时返回其附属的字符串偏移量。注意这改变了返回的数组的值,使其中的每个单元也是一个数组,其中第一项为匹配字符串,第二项为其偏移量。本标记自 PHP 4.3.0 起可用。
----------------------------------------------------------------------
string preg_quote ( string $str [, string $delimiter ] )
如果提供了可选参数 delimiter ,该字符也将被转义。可以用来转义 PCRE 函数所需要的定界符,最常用的定界符是斜线 /。
正则表达式的特殊字符包括:. \ + * ? [ ^ ] $ ( ) { } = ! < > | :
----------------------------------------------------------------------
mixed preg_replace_callback ( mixed $pattern , callback $callback , mixed $subject [, int $limit ] )
本函数的行为几乎和 preg_replace() 一样,除了不是提供一个 replacement 参数,而是指定一个 callback 函数。该函数将以目标字符串中的匹配数组作为输入参数,并返回用于替换的字符串。
----------------------------------------------------------------------
mixed preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit ] )
在 subject 中搜索 pattern 模式的匹配项并替换为 replacement 。如果指定了 limit ,则仅替换 limit 个匹配,如果省略 limit 或者其值为 -1,则所有的匹配项都会被替换。
replacement 可以包含 \\n 形式或(自 PHP 4.0.4 起)$n 形式的逆向引用,首选使用后者。每个此种引用将被替换为与第 n 个被捕获的括号内的子模式所匹配的文本。n 可以从 0 到 99,其中 \\0 或 $0 指的是被整个模式所匹配的文本。对左圆括号从左到右计数(从 1 开始)以取得子模式的数目。
对替换模式在一个逆向引用后面紧接着一个数字时(即:紧接在一个匹配的模式后面的数字),不能使用熟悉的 \\1 符号来表示逆向引用。举例说 \\11,将会使 preg_replace() 搞不清楚是想要一个 \\1 的逆向引用后面跟着一个数字 1 还是一个 \\11 的逆向引用。本例中的解决方法是使用 \${1}1。这会形成一个隔离的 $1 逆向引用,而使另一个 1 只是单纯的文字。
----------------------------------------------------------------------
array preg_split ( string $pattern , string $subject [, int $limit [, int $flags ]] )
返回一个数组,包含 subject 中沿着与 pattern 匹配的边界所分割的子串。
如果指定了 limit ,则最多返回 limit 个子串,如果 limit 是 -1,则意味着没有限制,可以用来继续指定可选参数 flags 。
flags 可以是下列标记的任意组合(用按位或运算符 | 组合):
PREG_SPLIT_NO_EMPTY
如果设定了本标记,则 preg_split() 只返回非空的成分。
PREG_SPLIT_DELIM_CAPTURE
如果设定了本标记,定界符模式中的括号表达式也会被捕获并返回。本标记添加于 PHP 4.0.5。
PREG_SPLIT_OFFSET_CAPTURE
如果设定了本标记,如果设定本标记,对每个出现的匹配结果也同时返回其附属的字符串偏移量。注意这改变了返回的数组的值,使其中的每个单元也是一个数组,其中第一项为匹配字符串,第二项为其在 subject 中的偏移量。本标记自 PHP 4.3.0 起可用。
----------------------------------------------------------------------
阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页