Blogger Information
Blog 35
fans 0
comment 0
visits 44126
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
php-练习正则函数和字符串函数-2019年10月17日
Victor的博客
Original
1398 people have browsed it

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



Correction status:qualified

Teacher's comments:完成的不错。
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post