search
HomeBackend DevelopmentPHP TutorialRegular expression processing function_PHP tutorial
Regular expression processing function_PHP tutorialJul 20, 2016 am 10:58 AM
functionBasedeal withstudyusregularofexpressiongrammar

前面我们已经学习了正则表达式的基础语法,包括了定界符、原子、元字符和模式修正 符。实际上正则表达式想要起作用的话,就必须借用正则表达式处理函数。本节我们就来介绍一下PHP中基于perl的正则表达式处理函数,主要包含了分割, 匹配,查找,替换等等处理操作,依旧是配合示例讲解,让我们开始吧。

和正则表达式一样,正则表达式处理函数不能够独立使用,而这必须相结合,才能够完成特定的功能。在前面我们也说过,基于perl的正则表达式要快于POXIS正则表达式处理函数,所以我们只介绍以preg开头的基于perl的正则表达式。注意:在能偶使用字符串函数处理的时候,就不要使用正则表达式来处理字符串,因为字符串处理函数更快。

下面我们来看一些常用的正则表达式处理函数。

1,preg_match()函数。

函数preg_match()执行一个正则表达式匹配,其定义如下:

<ol class="dp-c"><li class="alt"><span><span>int preg_match ( string </span><span class="vars">$pattern</span><span> , string </span><span class="vars">$subject</span><span> [, </span><span class="keyword">array</span><span> &</span><span class="vars">$matches</span><span> [, int </span><span class="vars">$flags</span><span> = 0 [, int </span><span class="vars">$offset</span><span> = 0 ]]] ) </span></span></li></ol>

实际上就是搜索subject中匹配pattern的部分, 以保存在数组matches中.请看示例:

<ol class="dp-c">
<li class="alt"><span><span><?php     </span></span></span></li>
<li><span> </span></li>
<li class="alt">
<span>     </span><span class="vars">$pattern</span><span> = </span><span class="string">'/<b>.*?</b>/'</span><span>;    </span>
</li>
<li>
<span>     </span><span class="vars">$string</span><span> = </span><span class="string">'<b>welcome</b> <b>to</b> <b>phpfuns</b>dsadsadas'</span><span>;    </span>
</li>
<li class="alt">
<span>     </span><span class="keyword">if</span><span> (preg_match(</span><span class="vars">$pattern</span><span>, </span><span class="vars">$string</span><span>, </span><span class="vars">$arr</span><span>)) {    </span>
</li>
<li>
<span>         </span><span class="func">echo</span><span> </span><span class="string">"正则表达式<b>{$pattern}</b>和字符串<b>{$string}</b>匹配成功<br>"</span><span>;    </span>
</li>
<li class="alt">
<span>         print_r(</span><span class="vars">$arr</span><span>);    </span>
</li>
<li>
<span>     } </span><span class="keyword">else</span><span> {    </span>
</li>
<li class="alt">
<span>         </span><span class="func">echo</span><span> </span><span class="string">"<font>正则表达式{$pattern}和字符串{$string}匹配失败</font>"</span><span>;    </span>
</li>
<li><span>     }    </span></li>
<li class="alt"><span> ?>   </span></li>
<li><span> </span></li>
</ol>
2,preg_match_all()函数。

函数preg_match_all()函数执行一个全局正则表达式匹配,其定义和preg_match()函数一致,只不过匹配了全部结果。请看示例:

<ol class="dp-c">
<li class="alt"><span><span><?php     </span></span></span></li>
<li>
<span>     </span><span class="vars">$pattern</span><span> = </span><span class="string">'/<b>.*?</b>/'</span><span>;    </span>
</li>
<li class="alt">
<span>     </span><span class="vars">$string</span><span> = </span><span class="string">'<b>welcome</b> <b>to</b> <b>phpfuns</b>dsadsadas'</span><span>;    </span>
</li>
<li>
<span>     </span><span class="keyword">if</span><span> (preg_match_all(</span><span class="vars">$pattern</span><span>, </span><span class="vars">$string</span><span>, </span><span class="vars">$arr</span><span>)) {    </span>
</li>
<li class="alt">
<span>         </span><span class="func">echo</span><span> </span><span class="string">"正则表达式<b>{$pattern}</b>和字符串<b>{$string}</b>匹配成功<br>"</span><span>;    </span>
</li>
<li>
<span>         print_r(</span><span class="vars">$arr</span><span>);    </span>
</li>
<li class="alt">
<span>     } </span><span class="keyword">else</span><span> {    </span>
</li>
<li>
<span>         </span><span class="func">echo</span><span> </span><span class="string">"<font>正则表达式{$pattern}和字符串{$string}匹配失败</font>"</span><span>;    </span>
</li>
<li class="alt"><span>     }    </span></li>
<li><span> ?>   </span></li>
<li class="alt"><span> </span></li>
</ol>

依旧是上面的示例(只换了正则处理函数为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均被忽略!)

请看下面的综合示例:

<ol class="dp-c">
<li class="alt"><span><span><?php     </span></span></span></li>
<li>
<span>    </span><span class="vars">$pattern</span><span> = </span><span class="string">'/(php)|(mysql)/e'</span><span>;    </span>
</li>
<li class="alt">
<span>    </span><span class="vars">$string</span><span> = </span><span class="string">'这个字符串中的php和mysql被替换成大写的了!'</span><span>;    </span>
</li>
<li>
<span>    </span><span class="vars">$result</span><span> = preg_replace(</span><span class="vars">$pattern</span><span>, </span><span class="string">'strtoupper("${1}2")'</span><span>, </span><span class="vars">$string</span><span>, -1, </span><span class="vars">$count</span><span>);    </span>
</li>
<li class="alt">
<span>    </span><span class="func">echo</span><span> </span><span class="vars">$result</span><span>.</span><span class="string">'<br>'</span><span>;    </span>
</li>
<li>
<span>    </span><span class="func">echo</span><span> </span><span class="vars">$count</span><span>;    </span>
</li>
<li class="alt"><span>?>   </span></li>
</ol>

上例中,我们使用了模式修正符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时都代表"不限制"。

我们来看一个示例:

<ol class="dp-c">
<li class="alt"><span><span><?php     </span></span></span></li>
<li>
<span>     </span><span class="vars">$pattern</span><span> = </span><span class="string">'/<p>(.*?)</p>/'</span><span>;    </span>
</li>
<li class="alt">
<span>     </span><span class="vars">$string</span><span> = </span><span class="string">'这个字符串中的<p>php</p>和<p>mysql</p>被分割了!'</span><span>;    </span>
</li>
<li>
<span>     </span><span class="vars">$result</span><span> = preg_split(</span><span class="vars">$pattern</span><span>, </span><span class="vars">$string</span><span>, -1, PREG_SPLIT_DELIM_CAPTURE);    </span>
</li>
<li class="alt">
<span>     print_r(</span><span class="vars">$result</span><span>);    </span>
</li>
<li><span> ?>   </span></li>
<li class="alt"><span> </span></li>
</ol>

上例中,我们使用了常量PREG_SPLIT_DELIM_CAPTURE设 置返回结果中包含子模式(如果设置为PREG_SPLIT_NO_EMPTY,preg_split()将进返回分隔后的非空部分。)我们如果把上例中正 则表达式的括号去掉,则结果中不再包含php和mysql这两个匹配成功的子模式。

常用的正则表达式处理函数我们就介绍完了,本节的例子可能会难一些,但希望大家还是认真的试验并体会一下,后面的正则表达式应用部分,我们会经常使用正则表达式处理函数。

原文地址:

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/445694.htmlTechArticle前面我们已经学习了正则表达式的基础语法,包括了定界符、原子、元字符和模式修正 符。实际上正则表达式想要起作用的话,就必须借用...
Statement
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
CakePHP如何处理文件上传?CakePHP如何处理文件上传?Jun 04, 2023 pm 07:21 PM

CakePHP是一个开源的Web应用程序框架,它基于PHP语言构建,可以简化Web应用程序的开发过程。在CakePHP中,处理文件上传是一个常见的需求,无论是上传头像、图片还是文档,都需要在程序中实现相应的功能。本文将介绍CakePHP中如何处理文件上传的方法和一些注意事项。在Controller中处理上传文件在CakePHP中,上传文件的处理通常在Cont

如何用php正则替换以什么开头的字符串如何用php正则替换以什么开头的字符串Mar 24, 2023 pm 02:57 PM

PHP正则表达式是一种针对文本处理和转换的有力工具。它可以通过解析文本内容,并按照特定的模式进行替换或截取,达到有效管理文本信息的目的。其中,正则表达式的一个常见应用是替换以特定字符开头的字符串,对此,我们进行如下的讲解

如何用 Golang 正则匹配多个单词或字符串?如何用 Golang 正则匹配多个单词或字符串?May 31, 2024 am 10:32 AM

Golang正则表达式使用管道符|来匹配多个单词或字符串,将各个选项作为逻辑OR表达式分隔开来。例如:匹配"fox"或"dog":fox|dog匹配"quick"、"brown"或"lazy":(quick|brown|lazy)匹配"Go"、"Python"或"Java":Go|Python|Java匹配单词或4位邮政编码:([a-zA

CakePHP如何处理多语言?CakePHP如何处理多语言?Jun 06, 2023 am 08:03 AM

CakePHP是一个流行的PHP开发框架,它可以帮助开发者快速构建高质量的Web应用程序。随着全球化的发展,越来越多的应用需要支持多语言,CakePHP也提供了相应的支持。本文将介绍CakePHP如何处理多语言。一、多语言支持多语言支持是CakePHP的一项重要功能。从版本2.0开始,CakePHP支持gettext文件格式,该

php 如何用正则去除中文php 如何用正则去除中文Mar 03, 2023 am 10:12 AM

php用正则去除中文的方法:1、创建一个php示例文件;2、定义一个含有中文和英文的字符串;3、通过“preg_replace('/([\x80-\xff]*)/i','',$a);”正则方法去除查询结果中的中文字符即可。

PHP语言开发中如何检测和处理空值错误?PHP语言开发中如何检测和处理空值错误?Jun 11, 2023 am 10:51 AM

随着现代Web应用不断发展,PHP作为其中最流行的编程语言之一,被广泛地应用于网站开发中。但在开发过程中,经常会遇到空值错误,而这些错误会导致应用程序抛出异常,进而影响用户的使用体验。因此,在PHP开发过程中,如何检测和处理空值错误,是程序员们需要掌握的重要技能。一、什么是空值错误在PHP开发过程中,空值错误通常指的是两种情况:变量未初始化和变

php怎么利用正则匹配去掉html标签php怎么利用正则匹配去掉html标签Mar 21, 2023 pm 05:17 PM

在本文中,我们将学习如何使用PHP正则表达式删除HTML标签,并从HTML字符串中提取纯文本内容。 为了演示如何去掉HTML标记,让我们首先定义一个包含HTML标签的字符串。

如何使用PHP进行Excel文件处理?如何使用PHP进行Excel文件处理?May 13, 2023 am 08:00 AM

随着Excel文件在商业领域和日常生活中的不断普及和应用,我们经常需要使用PHP处理Excel文件,例如数据的导入导出,数据的筛选和排序等。因此,本文将介绍如何使用PHP进行Excel文件处理。安装PHPExcel库PHPExcel是一款强大的PHP操作Excel文件的开源库,其支持读取、写入Excel文件,并提供了许多便捷的操作方法。在使用之前需要先安装P

See all articles

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Article

R.E.P.O. Energy Crystals Explained and What They Do (Yellow Crystal)
2 weeks agoBy尊渡假赌尊渡假赌尊渡假赌
Repo: How To Revive Teammates
1 months agoBy尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: How To Get Giant Seeds
4 weeks agoBy尊渡假赌尊渡假赌尊渡假赌

Hot Tools

mPDF

mPDF

mPDF is a PHP library that can generate PDF files from UTF-8 encoded HTML. The original author, Ian Back, wrote mPDF to output PDF files "on the fly" from his website and handle different languages. It is slower than original scripts like HTML2FPDF and produces larger files when using Unicode fonts, but supports CSS styles etc. and has a lot of enhancements. Supports almost all languages, including RTL (Arabic and Hebrew) and CJK (Chinese, Japanese and Korean). Supports nested block-level elements (such as P, DIV),

SublimeText3 Linux new version

SublimeText3 Linux new version

SublimeText3 Linux latest version

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

PhpStorm Mac version

PhpStorm Mac version

The latest (2018.2.1) professional PHP integrated development tool

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools