PHP正则表达式函数总结
/* 测试环境:PHP5.3.29(PCRE8.32) */
常用函数:(正则表达式规则基本同JS_RE_Read.txt)
PS:
1.PHP中的PCRE一般仅使用这三个修饰符:"i" "m" "s"。
2.PHP的正则表达式中反向引用使用注意点:
"/(abc)\\1/"和'/(abc)\1/'等价,前者之所以\\1是因为包含在双引号里(因为PHP的双引号和单引号不同)。
1:int preg_match(string $pattern, string $subject [,array &$matches [,int $flags = 0 [,int $offset = 0]]])
参数说明:
$pattern:要搜索的模式,字符串形式。
$subject:被搜索字符串。
$matches:如果提供了参数matches,它将被填充为搜索结果。$matches[0]为完整模式匹配到的文本,$matches[1] 为第一个捕获组匹配到的文本,以此类推。
$flags:备选值为PREG_OFFSET_CAPTURE,这时$matches将变成二维数组,见下面。
offset:通常,搜索从目标字符串的开始位置开始,参数offset用于指定从目标字符串的某个未知开始搜索。(单位:字节)
返回匹配的次数,0表示匹配失败,1表示匹配一处,发生未知错误返回FALSE,这个函数会在匹配一次之后停止搜索,所以匹配成功总是返回1,如果想要执行全局模式请使用preg_match_all()函数。
变量$matched详解:
$pattern="/(\d{2})(?'w'we)\\1(\w)/";
$subject="dfg12we12f";
$out=preg_match($pattern, $subject, $arr);
print_r($arr);
>>>Array(
[0] => 12we12
[1] => 12
[w] => we
[2] => we
[3] => f
)
当$flag = PREG_OFFSET_CAPTURE时的$matches变量:
$pattern="/(\d{2})(we)/";
$subject="dfg12we12f55we";
$out=preg_match($pattern, $subject, $arr, PREG_OFFSET_CAPTURE);
>>>Array(
[0] => Array(
[0] => 12we
[1] => 3
)
[1] => Array(
[0] => 12
[1] => 3
)
[2] => Array(
[0] => we
[1] => 5
)
)
2:int preg_match_all(string $pattern ,string $subject[, array &$matches[, int $flags = PREG_PATTERN_ORDER[, int $offset = 0]]] )
参数说明:
$matches:一个二维数组。
$flags:(其中第一或第二个可以和第三个可以相加使用。)
PREG_PATTERN_ORDER:结果排序为$matches[0]保存完整模式的所有匹配, $matches[1] 保存第一个子组的所有匹配,以此类推;
PREG_SET_ORDER:结果排序为$matches[0]包含第一次匹配得到的所有匹配(包含子组),$matches[1]是包含第二次匹配到的所有匹配(包含子组)的数组,以此类推;
PREG_OFFSET_CAPTURE:每个发现的匹配返回时会增加它相对目标字符串的偏移量。
返回完整匹配的次数,如果没有匹配返回0,发生未知错误返回FALSE。
变量$matched详解:
$pattern="/(\d{2})we/";
$subject="dfg12we12f55we";
$out=preg_match_all($pattern, $subject, $arr, PREG_PATTERN_ORDER);
print_r($arr);
>>>Array(
[0] => Array(
[0] => 12we
[1] => 55we
)
[1] => Array(
[0] => 12
[1] => 55
)
)
如果$flag = PREG_SET_ORDER:
>>>Array(
[0] => Array(
[0] => 12we
[1] => 12
)
[1] => Array(
[0] => 55we
[1] => 55
)
)
如果$flag = PREG_OFFSET_CAPTURE:($flag也等价于PREG_PATTERN_ORDER + PREG_OFFSET_CAPTURE)
$pattern="/(\d{2})(we)/";
$subject="dfg12we12f55we";
$out=preg_match_all($pattern, $subject, $arr, PREG_OFFSET_CAPTURE);
>>>Array(
[0] => Array(
[0] => Array(
[0] => 12we
[1] => 3
)
[1] => Array(
[0] => 55we
[1] => 10
)
)
[1] => Array(
[0] => Array(
[0] => 12
[1] => 3
)
[1] => Array(
[0] => 55
[1] => 10
)
)
[2] => Array(
[0] => Array(
[0] => we
[1] => 5
)
[1] => Array(
[0] => we
[1] => 12
)
)
)
3:string preg_replace(string $pattern, string $replacement, string $subject[, int $limit = -1[, int &$count]])
参数说明:
$limit:最大替换次数。 默认是-1(无限制)。
$count:返回替换执行的次数。
返回一个已被替换的字符串。
$replacement中可以使用$i(推荐)或\\i来引用一个分组(i的范围为0~99,并且不能引用显式命名分组)。
上述的\\i存在于双引号下,单引号使用\i。(理由上文提及过)
如果替换文本需要使用$和\:
"\\\\"
"\\$"
'\\'
'\$'
4:string preg_replace_callback(string $pattern, string $callback, string $subject[, int $limit = -1[, int &$count]])
参数说明:
无
返回一个已被替换的字符串。
例如:
$pattern="/(w)\w/";
$subject="welikeappleweyes";
$out=preg_replace_callback($pattern, "fun1", $subject);
function fun1($m){
return "$1";
}
echo $out;
//并且使用函数返回replacement时$和\\均失效,回调函数只有一个参数$m,为本次匹配时这个模式的捕获组。
//看下面例子:(只把上述的fun1修改)
function fun1($m){
print_r($m);
}
>>>
Array(
[0] => we
[1] => w
)
Array(
[0] => we
[1] => w
)
建议直接使用匿名函数:
$out=preg_replace_callback($pattern, function($m){
return "$1";
}, $subject);
5:array preg_split(string $pattern, string $subject[, int $limit = -1[, int $flags = 0]])
参数说明:
$limit:可选,如果指定,将限制分隔得到的子串最多只有limit个,返回的最后一个子串将包含所有剩余部分。(limit值为-1代表全部分隔)
$flag:备选,PREG_SPLIT_NO_EMPTY:返回分隔后的非空部分。
返回一个使用pattern作为边界分隔subject后的数组。
6:preg_last_error()
该函数无参数。
返回:(最后一次PCRE正则执行匹配时产生的错误代码)
PREG_NO_ERROR -未发生错误
PREG_INTERNAL_ERROR -PCRE引擎内部错误
PREG_BACKTRACK_LIMIT_ERROR -回溯超限
PREG_RECURSION_LIMIT_ERROR -递归超限
PREG_BAD_UTF8_ERROR -异常的UTF-8数据(仅在UTF-8模式的正则匹配时发生)
PREG_BAD_UTF8_OFFSET_ERROR -偏移量与合法的UTF-8字符不匹配(仅在UTF-8模式的正则匹配时发生)
例如:
preg_match('/(?:\D+|<\d+>)*[!?]/', 'foobar foobar foobar');
if (preg_last_error() == PREG_BACKTRACK_LIMIT_ERROR){
print '回溯超限!';
}
其他:
其他常量:
PCRE_VERSION返回PHP中内置的PCRE版本信息。
其他函数:
preg_filter()
preg_grep()
preg_quote()
preg_replace_callback_array()
PHP正则表达式函数总结的更多相关文章
- JavaScript正则表达式详解(二)JavaScript中正则表达式函数详解
二.JavaScript中正则表达式函数详解(exec, test, match, replace, search, split) 1.使用正则表达式的方法去匹配查找字符串 1.1. exec方法详解 ...
- Nodejs正则表达式函数之match、test、exec、search、split、replace使用详解
1. Match函数 使用指定的正则表达式函数对字符串惊醒查找,并以数组形式返回符合要求的字符串 原型:stringObj.match(regExp) 参数: stringObj 必选项,需要去进行匹 ...
- Oracle正则表达式函数:regexp_like、regexp_substr、regexp_instr、regexp_replace
Oracle正则表达式函数:regexp_like.regexp_substr.regexp_instr.regexp_replace --去掉所有特殊字符,只剩字母 SELECT REGEXP ...
- PHP-PCRE正则表达式函数
PCRE正则表达式函数 PCRE字符类 \\b 词边界 \\d 匹配任意数字 \\s 匹配任意空白,如TAB制表符或空格 \\t 匹配一个TAB ...
- Node.js之【正则表达式函数之match、test、exec、search、split、replace使用详解】
1. Match函数 使用指定的正则表达式函数对字符串惊醒查找,并以数组形式返回符合要求的字符串 原型:stringObj.match(regExp) 参数: stringObj 必选项,需要去进行匹 ...
- Oracle 正则表达式函数-REGEXP_REPLACE
背景 当初写oracle的一个存储过程,以前不知道sql里也有正则表达式,关于正则表达式教程很多了,这里只是记录下Oracle也有这个功能,下次再有类似需求用这个处理的确方便很多. 想起存储过程,就想 ...
- php中常用的正则表达式函数
php中常用的正则表达式函数 * preg_match() * preg_match_all() * preg_replace() * preg_filter() * preg_grep() * pr ...
- <转>PHP中正则表达式函数
PHP中的正则表达式函数 在PHP中有两套正则表达式函数库.一套是由PCRE(Perl Compatible Regular Expression)库提供的,基于传统型NFA.PCRE库使用和Perl ...
- 前端学PHP之正则表达式函数
前面的话 正则表达式不能独立使用,它只是一种用来定义字符串的规则模式,必须在相应的正则表达式函数中应用,才能实现对字符串的匹配.查找.替换及分割等操作.前面介绍了正则表达式的基础语法,本文将详细介绍正 ...
- PHP正则表达式函数学习
正则表达式是在日常开发中经常用到的,通常一些使用频率过高的正则表达式都是直接粘贴复制,对于基础正则的使用还是要铭记于心的,今天抽时间整理一些php正则表达式的用法. 一.php中常用的正则表达式函数 ...
随机推荐
- ubuntu软件卸载方法
一.查看软件包 1.查看已安装的软件包 dpkg --list 2.查看不知道要删除软件的具体名称 dpkg --get-selections | grep <软件相关名称> 二.卸载 1 ...
- Python 接口类或抽象类 反射
# 抽象类或者接口类,制定规范,统一方法名 # # 抽象类或者接口类,制定规范,统一方法名 from abc import ABCMeta,abstractmethod class Payrole(m ...
- Chrome 开发工具系列
- ZBrush中Local模式的旋转
刚接触ZBrush®的小伙伴可能对Local(局部)有了简单的了解,但是大多数人对它的认识还是比较模糊的,那么在本文中小编将对local命令做详细说明.此工具可以控制视图的旋转轴心点的位置,默认情况下 ...
- CF 689D - Friends and Subsequences
689D - Friends and Subsequences 题意: 大致跟之前题目一样,用ST表维护a[]区间max,b[]区间min,找出多少对(l,r)使得maxa(l,r) == minb( ...
- Anaconda3 安装报错 bunzip2: command not found
报错信息 Anaconda3-5.3.1-Linux-x86_64.sh: line 353: bunzip2: command not found tar: This does not look l ...
- CentOS 7编译安装Python3.7.X
在CentO S上通过编译安装Python3.7,添加python3软链,并使用python3. 环境 安装环境如下: Windows 10 Pro VMWare Workstation 15 Pro ...
- Python数据分析------例子1(信用卡欺诈)
1.读取数据 data=read_csv(path) data.head() #画图(查看class即分类的数据条形图),函数sort_index()是将dataframe按照行索引来排序输出值 co ...
- ES6 学习6 数组的扩展
本章学习要点: 扩展运算符 Array.from() Array.of() 数组实例的 copyWithin() 数组实例的 find() 和 findIndex() 数组实例的 fill() 数组实 ...
- XPATH怎么获取TITLE中有中文的标签
定位 //*[@id="kkpager"]/div[1]/span[1]/a[@title="下一页"] 获取元素 txt4 = txt.xpath('//*[ ...