正则表达式学习 二(常用函数详解)

去网上连搜带刮,终于给理解了大概~\(≧▽≦)/~啦啦啦

<?php //preg_match() //int preg_match ( string pattern, string subject [, array matches [, int flags]] ) //在 subject 字符串中搜索与 pattern 给出的正则表达式相匹配的内容。 //如果提供了 matches,则其会被搜索的结果所填充。$matches[0] 将包含与整个模式匹配的文本,$matches[1] 将包含与第一个捕获的括号中的子模式所匹配的文本,以此类推。 //preg_match() 返回 pattern 所匹配的次数。要么是 0 次(没有匹配)或 1 次,因为 preg_match() 在第一次匹配之后将停止搜索。preg_match_all() 则相反,会一直搜索到 subject 的结尾处。如果出错 preg_match() 返回 FALSE。 // //preg_match_all() //int preg_match_all ( string pattern, string subject, array matches [, int flags] ) //在 subject 中搜索所有与 pattern 给出的正则表达式匹配的内容并将结果以 flags 指定的顺序放到 matches 中。 //搜索到第一个匹配项之后,接下来的搜索从上一个匹配项末尾开始。 //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 只是单纯的文字。 //1.进行字符串的查找的替换 $str = "daoyu shi ge hao hai zi 5555"; $pattern = "/\s/"; //如果将变量定义为$pattern_1会出错 $str = preg_replace($pattern,'-',$str); echo $str."<br>"; //daoyu-shi-ge-hao-hai-zi-5555 //2.对字符串的逆向引用 //方法一 $pat = "/(\w+)-(\w+)-(\w+)-(\w+)-(\w+)-(\w+)-(\d+)/i"; $str =preg_replace($pat,"\$1",$str); echo $str."<br>"; //注意:如果是下面这种形式你会发现匹配的是:zi- 所以可以这样认为在有次数的{6}的情况下,他($1)匹配的是最后一次 $str='daoyu-shi-ge-hao-hai-zi-5555'; $pat = "/((\w+)-){6}(\d+)/i"; $str =preg_replace($pat,"\$1",$str); echo $str."<br>"; //方法二 $str = "daoyu-shi-ge-hao-hai-zi-5555"; $pat = "/(\w+)-(\w+)-(\w+)-(\w+)-(\w+)-(\w+)-(\d+)/i"; $str =preg_replace($pat,"\\1",$str); echo $str."<br>"; //注意:当正则写成$pat= "/((\w+)-){6}(\d+)/i";时和上面的情况一样 //3 当参数是数组的情况(用下手册的例子) $string = "The quick brown fox jumped over the lazy dog."; $patterns[0] = "/quick/"; $patterns[1] = "/brown/"; $patterns[2] = "/fox/"; $replacements[2] = "bear"; $replacements[1] = "black"; $replacements[0] = "slow"; print preg_replace($patterns, $replacements, $string)."<br>"; //或许你已经发现了,他是按“将以其键名在数组中出现的顺序来进行处理。这不一定和索引的数字顺序相同”按我的理解就是在按“写”的顺序而这并不一定是//索引的顺序(书册上还有还有ksort()后的例子,时间关系就不说了,有兴趣的兄弟可以自己找着看下) //如果 subject 是个数组,则会对 subject 中的每个项目执行搜索和替换,并返回一个数组。 //如果 pattern 和 replacement 都是数组,则 preg_replace() 会依次从中分别取出值来对 subject 进行搜索和替换。如果 replacement 中的值比 pattern 中的少,则用空字符串作为余下的替换值。如果 pattern 是数组而 replacement 是字符串,则对 pattern 中的每个值都用此字符串作为替换值。反过来则没有意义了。 //preg_split //array preg_split ( string pattern, string subject [, int limit [, int flags]] ) //返回一个数组,包含 subject 中沿着与 pattern 匹配的边界所分割的子串。 //如果指定了 limit,则最多返回 limit 个子串,如果 limit 是 -1,则意味着没有限制 $seek = array(); $text = "I have a dream that one day I can make it. So just do it, nothing is impossible!"; //将字符串按空白,标点符号拆分(每个标点后也可能跟有空格) $words = preg_split("/[.,;!\s']\s*/", $text); foreach($words as $val) { $seek[strtolower($val)] ++; } echo "共有大约" .count($words). "个单词。"; echo "其中共有" .$seek['i']. "个单词“I”。"; ?>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值