设为首页 收藏本站
查看: 421|回复: 0

[经验分享] PHP正则相关的几个函数

[复制链接]

尚未签到

发表于 2017-3-31 10:58:05 | 显示全部楼层 |阅读模式
  1、preg_grep()
  函数原型:array preg_grep (string $pattern, array $input)
PHP函数preg_grep()返回一个数组,其中包括了$input数组中与给定的$pattern模式相匹配的单元。对于输入数组$input中的每个元素,preg_grep()也只进行一次匹配。代码给出的示例简单地说明了preg_grep()函数的使用。
  <?php
 $subjects = array(  "Mechanical Engineering", "Medicine",  "Social Science", "Agriculture",  "Commercial Science", "Politics"  );
 //匹配所有仅由有一个单词组成的科目名
 $alonewords = preg_grep("/^[a-z]*$/i", $subjects); 
 print_r($alonewords );
?>

  
输出
Array
(
    [1] => Medicine
    [3] => Agriculture
    [5] => Politics
)
 
  2、preg_match
  <?php
preg_match("/^(http:\/\/)?([^\/])/i","http://www.php.net/index.html", $matches);
$host = $matches[2];// 从主机名中取得后面两段
preg_match("/[^\.\/]+\.[^\.\/]+$/", $host, $matches);
echo "domain name is: {$matches[0]}\n";
?>
  这是手册里的例子。
preg_match($pattern,$string,$matcher)其中$pattern对应的就是/^(http:\/\/)?([^\/]+)/i,$string 是http://www.php.net/index.html,$match是匹配到的结果。
按照手册上的意思:
如果提供了 matches,则其会被搜索的结果所填充。$matches[0] 将包含与整个模式匹配的文本,$matches[1] 将包含与第一个捕获的括号中的子模式所匹配的文本,以此类推。
$matches[0] 将包含与整个模式匹配的文本。
咱们用pring_r打印出来第一个$matches:
Array ( [0] => http://www.php.net [1] => http:// [2] => www.php.net )
$matches[0] 将包含与整个模式匹配的文本,$matches[1] 将包含与第一个捕获的括号中的子模式所匹配的文本。在正则中,()代表模式:匹配 pattern 并获取这一匹配。所获取的匹配可以从产生的 Matches 集合得到,在VBScript 中使用 SubMatches 集合,在JScript 中则使用 $0…$9 属性。就是说数组中下标为1的值就是正则中/^(http:\/\/)?([^\/]+)/i第一个()里的值!数组下标2的值以此类推
  3、preg_match_all -- 进行全局正则表达式匹配
  int preg_match_all ( string pattern, string subject, array matches [, int flags] )
  在 subject 中搜索所有与 pattern 给出的正则表达式匹配的内容并将结果以 flags 指定的顺序放到 matches 中。
  搜索到第一个匹配项之后,接下来的搜索从上一个匹配项末尾开始。
  flags 可以是下列标记的组合(注意把 PREG_PATTERN_ORDER 和 PREG_SET_ORDER 合起来用没有意义):
  PREG_PATTERN_ORDER
  对结果排序使 $matches[0] 为全部模式匹配的数组,$matches[1] 为第一个括号中的子模式所匹配的字符串组成的数组,以此类推。
  例子:
<?php
preg_match_all ("|<[^>]+>(.*)</[^>]+>|U","<b>example: </b><div align=left>this is a test</div>",$out, PREG_PATTERN_ORDER);
print $out[0][0].", ".$out[0][1]."\n";
print $out[1][0].", ".$out[1][1]."\n";
?>
  本例将输出:
<b>example: </b>, <div align=left>this is a test</div>
example: , this is a test
  因此,$out[0] 包含匹配整个模式的字符串,$out[1] 包含一对 HTML 标记之间的字符串。
  PREG_SET_ORDER
  对结果排序使 $matches[0] 为第一组匹配项的数组,$matches[1] 为第二组匹配项的数组,以此类推。
  例子:
<?php
preg_match_all ("|<[^>]+>(.*)</[^>]+>|U","<b>example: </b><div align=left>this is a test</div>",$out, PREG_SET_ORDER);
print $out[0][0].", ".$out[0][1]."\n";
print $out[1][0].", ".$out[1][1]."\n";
?>
  本例将输出:
<b>example: </b>, example:
<div align=left>this is a test</div>, this is a test
  本例中,$matches[0] 是第一组匹配结果,$matches[0][0] 包含匹配整个模式的文本,$matches[0][1] 包含匹配第一个子模式的文本,以此类推。同样,$matches[1] 是第二组匹配结果,等等。
  PREG_OFFSET_CAPTURE
  如果设定本标记,对每个出现的匹配结果也同时返回其附属的字符串偏移量。注意这改变了返回的数组的值,使其中的每个单元也是一个数组,其中第一项为匹配字符串,第二项为其在 subject 中的偏移量。本标记自 PHP 4.3.0 起可用。
  如果没有给出标记,则假定为 PREG_PATTERN_ORDER。
  返回整个模式匹配的次数(可能为零),如果出错返回 FALSE。
  <?php
$subject = "abcdef";
$pattern = '/^def/';
preg_match($pattern, substr($subject,3), $matches, PREG_OFFSET_CAPTURE);
print_r($matches);
?>
输出
  Array
(
    [0] => Array
        (
            [0] => def
            [1] => 0
        )
  )

  4、preg_replace
  mixed preg_replace ( mixed pattern, mixed replacement, mixed subject [, int limit])
  
在 subject 中搜索 pattern 模式的匹配项并替换为 replacement。如果指定了 limit,则仅替换 limit 个匹配,如果省略 limit 或者其值为 -1,则所有的匹配项都会被替换。
  下例返回值为 $startDate = 6/19/1969
<?php
$patterns = array("/(19|20)\d{2})-(\d{1,2})-(\d{1,2})/", "/^\s*{(\w+)}\s*=/");
$replace = array("\\3/\\4/\\1", "$\\1 =");
print preg_replace($patterns, $replace, "{startDate} = 1969-6-19");
?>
  
5、preg_split

  preg_split -- 用正则表达式分割字符串
说明
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
如果设定了本标记,定界符模式中的括号表达式也会被捕获并返回。
  PREG_SPLIT_OFFSET_CAPTURE
如果设定了本标记,对每个出现的匹配结果也同时返回其附属的字符串偏移量。注意这改变了返回的数组的值,使其中的每个单元也是一个数组,其中第一项为匹配字符串,第二项为其在 subject 中的偏移量。本标记自 PHP 4.3.0 起可用。
  
例子 1. preg_split() 例子
  <?php
// split the phrase by any number of commas or space characters,
// which include " ", \r, \t, \n and \f
$keywords = preg_split ("/[\s,]+/", "hypertext language, programming");
?>
  例子 2. 将字符串分割成字符
  <?php
$str = 'string';
$chars = preg_split('//', $str, -1, PREG_SPLIT_NO_EMPTY);
print_r($chars);
?>
  例3
  <?php
print_r(preg_split('/(a)/', 'mama', -1, PREG_SPLIT_DELIM_CAPTURE));
?>
  本例将输出:
Array
(
    [0] => m
    [1] => a
    [2] => m
    [3] => a
    [4] =>
)
  例子 4. 将字符串分割为匹配项及其偏移量
  <?php
$str = 'hypertext language programming';
$chars = preg_split('/ /', $str, -1, PREG_SPLIT_OFFSET_CAPTURE);
print_r($chars);
?>
  本例将输出:
  Array
(
    [0] => Array
        (
            [0] => hypertext
            [1] => 0
        )
      [1] => Array
        (
            [0] => language
            [1] => 10
        )
      [2] => Array
        (
            [0] => programming
            [1] => 19
        )
  )

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-358070-1-1.html 上篇帖子: PHP 10条有用的建议 下篇帖子: PHP程序员如何突破成长瓶颈
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表