博主信息
Victor的博客
博文
32
粉丝
0
评论
0
访问量
6166
积分:0
P豆:68

php-练习正则函数和字符串函数-2019年10月17日

2019年10月21日 18:50:05阅读数:335博客 / Victor的博客 / PHP

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>';
?>



批改状态:合格

老师批语:完成的不错。

全部评论

文明上网理性发言,请遵守新闻评论服务协议

条评论
暂无评论暂无评论!