当前位置:首页 » 编程语言 » php正则表达式转义

php正则表达式转义

发布时间: 2022-12-19 13:51:09

‘壹’ php正则表达式验证中文时候的编码问题

$str = '中华人民共和国123456789abcdefg';
echo preg_match("/^[\u4e00-\u9fa5_a-zA-Z0-9]{3,15}$",$strName);
运行一下上面这段代码,看会有什么提示信息?
Warning: preg_match(): Compilation failed: PCRE does not support \L, \l, \N, \P, \p, \U, \u, or \X at offset 3 in F:\wwwroot\php\test.php on line 2
原来,PHP正则表达式中不支持下列 Perl 转义序列:\L, \l, \N, \P, \p, \U, \u, or \X
在 UTF-8 模式下,允许用“\x{...}”,花括号中的内容是表示十六进制数字的字符串。原来的十六进制转义序列 \xhh 如果其值大于 127 的话则匹配了一个双字节 UTF-8 字符。
所以,可以这样来解决preg_match("/^[\x80-\xff_a-zA-Z0-9]{3,15}$",$strName);
复制代码 代码如下:
<?php
$shouji ="哈哈哈哈";
if (!preg_match("/^[\x80-\xff]{6,30}$/",$shouji)){
echo "nonono";
}
else {
echo "yesyesyes";
}
?>

‘贰’ php 正则,模板变量,一些源码的模板中为什么变量的正则表达式中的美元符号前是三个转义字符

其实源自php的处理函数,preg_replace类似的正则函数,这些函数是他调用的扩展,在处理字符串时候需要先将字符串按照php解析一次,\\\$要解析成\$,然后扩站立的函数还要解析一次,\$变成$,所以最后\\\$其实是匹配$

‘叁’ php 正则表达式 转义

$regex = "/\[sm\](.+?)\[\/sm\]/";
if (preg_match_all($regex, $string,$arr)) print_r($arr);

‘肆’ 在PHP正则表达式中双引号与单引号有什么区别,双引号里哪些需要转义,单引号里又是哪些需要转义

双引号里面的可以转义,单引号里面的不能转义,比如简单的\d代表数字,那么在单引号里面就不代表数字。

‘伍’ php 的 preg_replace 函数中的 正则表达式问题 为什么是 preg_replace("/(.*)[\/\\\]/",'',$text)

转义是有两个地方的,一个是PHP解析器,一个是PHP内的正则表达式解析器。
PHP代码在运行的时候,所有使用引号的PHP常量都会被解析一次,字符串如果是一个正则表达式,交给正则引擎又会被解析一次。
所以,当表达式中要用到一个 \ 的时候,需要写两个,也就是 \\ 而当表达式需要两个的时候,需要写四个,也就是 \\\\。
当字符串 "\\\\" 经过PHP编译引擎的时候转义一次,得到 "\\" 这个字符串,然后再传递给正则引擎执行正则匹配,再被解析转义一次,得到 "\"

你的代码 preg_replace("/(.*)[\/\\\]/",'',$text) 中的表达式 "/(.*)[\/\\\]/" 经过PHP编译引擎后,得到的是 "/(.*)[\/\\]/" ,因为] 符号在PHP引擎中是不需要转义的,所以 \ 符号原样输出。当 "/(.*)[\/\\]/" 进入正则引擎的时候,解析得到 /(.*)[/\]/

引用的地址是PHP官方的解释:

replacement中可以包含后向引用\\n
或(php 4.0.4以上可用)$n, 语法上首选后者. 每个
这样的引用将被匹配到的第n个捕获子组捕获到的文本替换. n
可以是0-99, \\0和$0代表完整的模式匹配文本.
捕获子组的序号计数方式为: 代表捕获子组的左括号从左到右, 从1开始数. 如果要在replacement
中使用反斜线, 必须使用4个("\\\\", 译注: 因为这首先是php的字符串, 经过转义后, 是两个, 再经过
正则表达式引擎后才被认为是一个原文反斜线).

‘陆’ php正则表达式字符串转义有错

你要得到什么结果?
建议你先print_r($price);
比较一下结果。

你的联系方式,我可以远程助你。

‘柒’ PHP正则表达式

不用正则过滤,入库前用addslashes -- 添加反斜线引用字符串,该字符串为了数据库查询语句等的需要在某些字符前加上了反斜线。如:单引号(')、双引号(")、反斜线(\)与 NUL(NULL 字符)。

代码:
if (!get_magic_quotes_gpc()){
$str=addslashes($str);
}
处理过的$str就可以安全入库了。再不会出现插入时导致sql语句错误。

‘捌’ PHP 正则表达式总结

PHP 正则表达式总结

1.PHP中两个常用的正则函数

a.preg_match 正则函数,以perl语言为基础

语法:preg_match( mode,string subject,array matches)

说明:mode参数---- 正则的模块,也就是正则表达式(语法)

subject参数---- 正则的内容

matches参数---- 正则的结果(获得一个数组的形式)

b.ereg 正则函数,以POSIX基础(Unix、Script)

语法:ereg(mode ,string subject, array regs)

2.正则表达式中包括的元素

a.原子(普通字符:a-z A-Z 0-9 、原子表、转义字符)

b.元字符(有特殊功能的字符,如:# 、*)

c.模式修正符(系统内置部分字符 i、m、S、U ...)

3.正则表达式中的“原子”

a.a-z A-Z _ 0-9 //最常见的字符

b.(abc)(skd) //用圆括号包含起来的单元符号(一个整体)

c.[abcs][^abd] //用方括号包含的原子表,原子表中的^代表排除或相反的内容

d.转义字符

d 包含所有的数字[0-9]

D 除所有数字外[^0-9]

w 包含所有英文字符[a-z A-Z 0-9]

W 除所有英文字符外[^a-z A-Z 0-9]

s 回车,换行等

......

注明: 圆括号 必须是整体才能匹配; 方括号 只要是其子集,都可以匹配(内容存在)

4.正则表达式元字符

* 匹配前一个内容的0次1次或多次

. 匹配内容的0次1次或多次,但不包含回车换行(代指自己,任何内容)

+ 匹配前一个内容的1次或多次

? 匹配前一个内容的.0次或1次

| 选择匹配类似PHP中的| (因为这个运算符合是弱类型导致前面最为整体匹配,类似一个单词匹配)

^ 匹配字符串首部内容

$ 匹配字符串尾部内容

b 匹配单词边界,边界可以是空格或者特殊符合(有单词分界符,类似空格)

B 匹配除带单词边界意外内容(无单词分界符)

{m} 匹配前一个内容的重复次数为M次

{m,} 匹配前一个内容的重复次数大于等于M次

{m,n} 匹配前一个内容的重复次数M次到N次

( ) 合并整体匹配,并放入内存,可使用1 2…依次获取 (调用放入内存中的内容)

5.运算顺序

依然遵循从左到→右的运算规则

优先级:

( ) 圆括号因为是内存处理所以最高

* ? + { } 重复匹配内容其次

^ $ b 边界处理第三

| 条件处理第四

最后按照运算顺序计算匹配

6.模式修正符

模式修正符是为正则表达式增强和补充的一个功能,使用在正则之外 例如:/ 正则 / U

常用修正符:

i 正则内容在匹配时候不区分大小写(默认是区分的)

m 在匹配首内容或者尾内容时候采用多行识别匹配

s 将转义回车取消是为单行匹配如. 匹配的时候

x 忽略正则中的空白

A 强制从头开始匹配

D 强制$匹配尾部无任何内容 n

U 禁止贪婪匹配 只跟踪到最近的一个匹配符并结束, 常用在采集程序上的正则表达式

7.匹配功能

preg_match_all 全部匹配函数

语法:preg_match_all ( string pattern, string subject, array matches [, int flags] )

说明:对结果排序使 $matches[0] 为全部模式匹配的数

用途:截取比较详细的内容,采集网页,分析文本

8.替换功能

preg_replace 正则替换函数

语法:preg_replace ( mixed pattern, mixed replacement, mixed subject [, int limit] )

说明:通过正则表达式来替换相关内容,类似之前学过的str_replace字符串替换,但 功能要强于它

提示:1、替换内容可以是一个正则也可以是数组正则

2、替换内容可以通过修正符e来解决替换执行内容

用途:替换一些比较复杂的内容上,也可以用于内容的转换上

9.分割功能

preg_split 正则切割

语法:preg_split ( string pattern, string subject [, int limit [, int flags]] )

说明:通过正则表达式来切割相关内容,类似之前学过的explode切割函数,但explode 只能按照一种方式切割有局限性。

;

‘玖’ php正则表达式中要匹配/时候是否要转义

ResultString = ereg_replace('/', 'gone', $subject);

$result = preg_replace('%/%', 'gone', $subject);

‘拾’ 在PHP正则表达式中双引号与单引号有什么区别,双引号里哪些需要转义,单引号里又是哪些需要转义

单引号里不会转义
因此“\d"会直接传给正则引擎,然后由正则引擎将\d解释成数字
双引号中\d会转义,由于\d不是有意义的转义符,因此\d会变成字符‘d'传给正则引擎,所以必须写成'\\d'

热点内容
openwrt编译需要网络吗 发布:2025-01-28 03:49:16 浏览:683
网易云上传歌词手机 发布:2025-01-28 03:42:51 浏览:61
m3u8缓存文件 发布:2025-01-28 03:42:51 浏览:547
编程算损耗 发布:2025-01-28 03:33:03 浏览:456
sql存储过程返回多个结果 发布:2025-01-28 03:24:03 浏览:463
长安欧尚科赛哪个配置值得购买 发布:2025-01-28 03:19:35 浏览:116
c全排列算法 发布:2025-01-28 03:18:16 浏览:754
梵蒂冈顶级时装ftp 发布:2025-01-28 03:03:36 浏览:695
手游脚本有前途吗 发布:2025-01-28 02:46:55 浏览:379
抓包编程 发布:2025-01-28 02:42:41 浏览:930