10月17日
正则函数和字符串函数的练习
总结:函数比较多,通过练习了解个大概,实际使用时碰到类似的功能,知道有这么个函数可以用,具体用法还是需要现用现查。
练习代码:
<?php //需要匹配的字符串集 $str = '~jduls88430jsfhlj/h237502hfslflhs@#%sdfjsd/llksfowelk0(_)_)*dsfjl13921391392swlkKLJGKJlk slkjfekls jfi{ejlsjfl}sf dks<header>jfos fsljfslfjshttps:\\dfewlop0320~dfljk史蒂芬孙金佛我了jdue222ls fslesfl;s```l;dfo13801380138mls-=s-d$f=welsd8\' . \'98888)j\' . \'slfjos\' . \'k老师都急疯了是)zhengze.php 001122334455667788jlksj<a>doskKDFJOLMd</a>lsfsf hebao@139.<command type="command checkbox radio" label="Use Command" title="Use Command does stuff" icon="/icons/command.png"> dd keophp winwein@sina.net aaa BBDcbbccels qw222 222tt 4455667788kS&FW[]EFSDERKLhttpGldfkjd0""khi"lop"w0-oDFWEvl;slls??:""{}|[ok^^%dfk ljfoelld;l8'; echo '<pre>'; // $pattam = '/(jl|sj)|([t]{2})/'; // $a = preg_match_all($pattam, $str, $matches); // var_dump($a); // var_dump($matches); preg_match("/^(http:\/\/)?([^\/]+)/i", "http://blog.snsgou.com/index.php", $matches); $host = $matches[2]; var_dump($matches); // 从主机名中取得后面两段 ./ preg_match("/[^\.\/]/", $host, $matches); echo "域名为:{$matches[0]}"; preg_match("/[^\.\/]+/", $host, $matches); echo "域名为:{$matches[0]}"; preg_match("/[^\.\/]+\./", $host, $matches); echo "域名为:{$matches[0]}"; preg_match("/[^\.\/]+\.[^\.\/]/", $host, $matches); echo "域名为:{$matches[0]}"; preg_match("/[^\.\/]+\.[^\.\/]+/", $host, $matches); echo "域名为:{$matches[0]}"; preg_match("/[^\.\/]+\.[^\.\/]+$/", $host, $matches); echo "域名为:{$matches[0]}"; echo '<hr>'; $str = "<pre>学习php是一件快乐的事。</pre><pre>所有的phper需要共同努力!</pre>"; $kw = "php"; preg_match_all('/<pre>([\s\S]*?)<\/pre>/', $str, $mat); print_r($mat); for ($i = 0; $i < count($mat[0]); $i++) { echo $mat[0][$i]; $mat[0][$i] = $mat[1][$i]; echo $mat[1][$i]; $mat[0][$i] = str_replace($kw, '<span style="color:#ff0000">' . $kw . '</span>', $mat[0][$i]); echo $mat[0][$i]; $str = str_replace($mat[1][$i], $mat[0][$i], $str); } echo $str; echo '<hr>'; $subject = '^ouyangke$zhulaoshi=miejue!\ximen&[] '; $a = preg_quote($subject); var_dump($a); $pattem = '/^(\d+)?\.\d+$/'; $array = array(1, 2, 3.4, 53, 7.9); $a = preg_grep($pattem, $array); var_dump($a); $pattem = '/[\s.]+/'; $subject = 'ouyangke ouyangke zhulaoshi zhulaoshi ximen ximen'; $a = preg_split($pattem, $subject); var_dump($a); echo implode($a); echo '<hr>'; //字符串函数 $str = 'ouyangke,zhulaoshi,ximen'; $arr = explode(',', $str); print_r($arr); echo strstr('ouyangke', 'ou'), '<br>'; echo strstr('ouyangke', 'yang', true); echo '<hr>'; echo strtr('ouyangke', 'ou', 'zahu'), '<br>'; echo strtr('ouyangke', ['ou' => 'zhiu']); echo '<hr>'; echo strrchr('ouyangke', 'gk'), '<br>'; echo strrchr('ouyangke', 'yang'); echo '<hr>'; echo stristr('ouyangke', 'gk'), '<br>'; echo strpos('ouyangke', 'gk'), '<br>'; echo stripos('ouyangke', 'gk'), '<br>'; echo strripos('ouyangke', 'gk'), '<br>'; echo strrpos('ouyangke', 'y'), '<br>'; // echo substr_replace('gk', 'C', 'ouyangke'), '<br>'; echo str_replace('gk', 'Cii', 'ouyangke'), '<br>'; $replace = array("1: AAA", "2: AAA", "3: AAA"); $b = substr_replace($replace, 'BBB', 3, 3); var_dump($b); //正则表达式 /* 1、原子 :普通字符;abc 123 DDC 非打印字符; \n \r \f \t \v 【自定义字符】-->[]包起来的集合:[0-9a-zA-Z] or [3-7] 2、元字符 . 必须和 原子 一起使用,是原子的修饰 和 限定条件 例如: /12./ /ZH./ 匹配除换行符之外的任意字符; | 匹配2个或多个分支,可理解为并列: 比如 /12|56/ [] 匹配[]中指定的任意一个原子 [^] 匹配除去[]内指定原子的其他任意同类原子,比如[^a-z] ^ 匹配字符串开始位置,必须从指定的集合或原子开始 比如^[A-Z] $ 匹配字符串结束位置的原子或指定集合 比如[A-Z]$ 3、限定符 {n} 表示前面的原子出现n次 比如:[a-z]{5} {n,} 表示前面原子连续出现不少于n次 比如:[a-z]{1,} {n,m} 表示前面原子连续出现最少n次,最多m次 比如[0-9]{1,3} * 前面原子出现0次以上 比如[0-9]* 通配最大情况 + 前面原子出现1次以上 比如[0-9]+ 只要出现的最大情况 ? 前面原子出现0次或1次 比如[0-9]? 通配最大1位的情况 4、预定义字符 \d 匹配任意一个十进制数 等价于 [0-9] \D 匹配任意字符,除十进制数之外的,上述取反,相当于[^0-9] \w 匹配任意一个字母数字和下划线字符,等价于 [0-9a-zA-Z] \W 匹配任意一个除字母数字和下划线之外的字符,等价于 [^0-9a-zA-Z] \s 匹配任意一个非空白字符(非打印的) \S 匹配任意一个除空白字符以外的字符 \b 匹配整词的边界 比如/com\b/ /222\b/ 后面必须为空白字符 \B 匹配整词边界以外的部分,上述的取反 5、特殊字符需要在前面增加\转义 有:\*+?.|^$[]() 6、分组符 () 使整体成为一个原子,多个原子组成大原子 比如:/(jl|sj)|([0-9])/ 7、界定符 //,正则表达式要包裹在//中 8、修正符 在界定符后面 U 取消贪婪模式(这是默认模式) i 忽略大小写 s 匹配的字符串当做一行来看 x 模式中的空白忽略不计 9、 正则表达式 转义字符 \ 模式单元与原子表 ()、(?:)、(?=)、[] 重复匹配 *、+、?、{n}、{n,}、{n,m} 边界匹配 ^、$、\b、\B 模式选择 | */ echo '</pre>'; ?>