正则表达式
前面我们已经学习了正则表达式的基础语法,包括了定界符、原子、元字符和模式修正 符。实际上正则表达式想要起作用的话,就必须借用正则表达式处理函数。本节我们就来介绍一下PHP中基于perl的正则表达式处理函数,主要包含了分割, 匹配,查找,替换等等处理操作,依旧是配合示例讲解,让我们开始吧。和正则表达式一样,正则表达式处理函数不能够独立使用,而这必须相结合,才能够完成特定的功能。在前面我们也说过,基于perl的正则表达式要快于POXIS正则表达式处理函数,所以我们只介绍以preg开头的基于perl的正则表达式。注意:在能偶使用字符串函数处理的时候,就不要使用正则表达式来处理字符串,因为字符串处理函数更快。
下面我们来看一些常用的正则表达式处理函数。
1,preg_match()函数。
函数preg_match()执行一个正则表达式匹配,其定义如下:
int preg_match ( string $pattern , string $subject [, array &$matches [, int $flags = 0 [, int $offset = 0 ]]] )
实际上就是搜索subject中匹配pattern的部分, 以保存在数组matches中.请看示例:
复制代码 代码如下:
$pattern = '/.*?/';
$string = 'welcome to phpfunsdsadsadas';
if (preg_match($pattern, $string, $arr)) {
echo "正则表达式{$pattern}和字符串{$string}匹配成功
";
print_r($arr);
} else {
echo "正则表达式{$pattern}和字符串{$string}匹配失败";
}
?>
2,preg_match_all()函数。
函数preg_match_all()函数执行一个全局正则表达式匹配,其定义和preg_match()函数一致,只不过匹配了全部结果。请看示例:
复制代码 代码如下:
$pattern = '/.*?/';
$string = 'welcome to phpfunsdsadsadas';
if (preg_match_all($pattern, $string, $arr)) {
echo "正则表达式{$pattern}和字符串{$string}匹配成功
";
print_r($arr);
} else {
echo "正则表达式{$pattern}和字符串{$string}匹配失败";
}
?>
依旧是上面的示例(只换了正则处理函数为preg_match_all()),但是匹配的结果数组内容不一样了。
3, preg_replace()函数
函数preg_replace()执行一个正则表达式替换,其定义如下:
mixed preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] )
实际上就是搜索subject中匹配pattern的部分, 以replacement进行替换.其中limit指的是每个模式在每个subject上进行替换的最大次数. 默认是 -1(无限). 如果指定count,将会被填充为完成的替换次数.
注意:
A,如果subject是一个数组, preg_replace()返回一个数组, 其他情况下返回一个字符串.
B,如果匹配被查找到, 替换后的subject被返回, 其他情况下返回没有改变的subject. 如果发生错误, 返回NULL .
C,子模式可以应用到参数replacement中,使用方式为n或者${n}。(在正则表达式的模式中我们只能使用n的形式来获取已经匹配的子模式,切记!)
D,如果使用模式修正符e,则参数replacement中可以解析函数。(在其它的正则表达式处理函数中,模式修正符e均被忽略!)
请看下面的综合示例:
复制代码 代码如下:
$pattern = '/(php)|(mysql)/e';
$string = '这个字符串中的php和mysql被替换成大写的了!';
$result = preg_replace($pattern, 'strtoupper("${1}2")', $string, -1, $count);
echo $result.'
';
echo $count;
?>
上例中,我们使用了模式修正符e,这样的话strtoupper()函数就可以当作字符串被解析,这就是模式修正符e的作用!而参数${1}和2分别是子模式1和子模式2。上例的作用就是将字符串$string中匹配到的子模式php和mysql替换成大写字母!
4,preg_split()函数。
preg_split执行一个正则表达式分隔字符串。其定义如下:
array preg_split ( string $pattern , string $subject [, int $limit = -1 [, int $flags = 0 ]] )
实际上就是将subject按照pattern分割,返回分割后的数组。其中,limit将限制分隔得到的子串最多只有limit个, 返回的最后一个子串将包含所有剩余部分.limit值为-1, 0或null时都代表"不限制"。
我们来看一个示例:
复制代码 代码如下:
$pattern = '/
(.*?)
/';$string = '这个字符串中的
php
和mysql
被分割了!';$result = preg_split($pattern, $string, -1, PREG_SPLIT_DELIM_CAPTURE);
print_r($result);
?>
上例中,我们使用了常量PREG_SPLIT_DELIM_CAPTURE设 置返回结果中包含子模式(如果设置为PREG_SPLIT_NO_EMPTY,preg_split()将进返回分隔后的非空部分。)我们如果把上例中正 则表达式的括号去掉,则结果中不再包含php和mysql这两个匹配成功的子模式。
常用的正则表达式处理函数我们就介绍完了,本节的例子可能会难一些,但希望大家还是认真的试验并体会一下,后面的正则表达式应用部分,我们会经常使用正则表达式处理函数。

PHP日志记录对于监视和调试Web应用程序以及捕获关键事件,错误和运行时行为至关重要。它为系统性能提供了宝贵的见解,有助于识别问题并支持更快的故障排除

Laravel使用其直观的闪存方法简化了处理临时会话数据。这非常适合在您的应用程序中显示简短的消息,警报或通知。 默认情况下,数据仅针对后续请求: $请求 -

PHP客户端URL(curl)扩展是开发人员的强大工具,可以与远程服务器和REST API无缝交互。通过利用Libcurl(备受尊敬的多协议文件传输库),PHP curl促进了有效的执行

Laravel 提供简洁的 HTTP 响应模拟语法,简化了 HTTP 交互测试。这种方法显着减少了代码冗余,同时使您的测试模拟更直观。 基本实现提供了多种响应类型快捷方式: use Illuminate\Support\Facades\Http; Http::fake([ 'google.com' => 'Hello World', 'github.com' => ['foo' => 'bar'], 'forge.laravel.com' =>

您是否想为客户最紧迫的问题提供实时的即时解决方案? 实时聊天使您可以与客户进行实时对话,并立即解决他们的问题。它允许您为您的自定义提供更快的服务

文章讨论了PHP 5.3中引入的PHP中的晚期静态结合(LSB),从而允许静态方法的运行时分辨率调用以获得更灵活的继承。 LSB的实用应用和潜在的触摸


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

适用于 Eclipse 的 SAP NetWeaver 服务器适配器
将Eclipse与SAP NetWeaver应用服务器集成。

ZendStudio 13.5.1 Mac
功能强大的PHP集成开发环境

螳螂BT
Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

安全考试浏览器
Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)