正则表达式中?=和?:和?!的理解
web 正则表达式 2019-05-10 982 0
关于本站

本人承接php网站维护,病毒查杀,网站编辑,网站改版,html制作

有需要网站维护,改版,病毒查杀,网站编辑,网站备案,html制作等相关的工作可以联系我。
本人有多年相关工作经验,也可提供免费咨询,交个朋友。
有需要探讨问题的朋友,也可以加我微信,共同探讨!
微信:15011482830 QQ:408917339

1695902 1607 17
最新评论
报错 in promise) MiniProgramError {"errMsg":"removeTabBarBadge:fail not TabBar page"} Object
评 人人商城小程序昵称变成了“微信用户”头像也不显示?getUserInfo换成getUserProfile
按照这个修改后报错: ReferenceError: n is not defined at success (index.js? [sm]:3) at Function.forEach.u.<computed> (VM10210 WAService.js:2) at :55237/appservice/<api login success callback function> at Object.success (VM10210 WAService.js:2) at r (VM10210 WAService.js:2) at VM10210 WAService.js:2 at w (VM10210 WAService.js:2) at VM10210 WAService.js:2 at VM15 asdebug.js:1 at I (VM15 asdebug.js:1)(env: Windows,mp,1.05.2105170; lib: 2.17.0)
评 人人商城小程序昵称变成了“微信用户”头像也不显示?getUserInfo换成getUserProfile
asfdsafasdf
评 ;!function(){}();
:kaixin:
评 thinkphp 3.2.3 Runtime\Logs日志文件太多怎么关闭日志功能
其他浏览器呢
评 对服务器的请求已遭到某个扩展程序的阻止
文章标签更多
ThinkPHP (163)
Mysql (35)
DedeCms (33)
jQuery (41)
证件照 (1)
setInc (3)
setDec (3)
onclick (4)

要理解?=和?!,首先需要理解前瞻,后顾,负前瞻,负后顾四个概念:

前瞻:
exp1(?=exp2) 查找exp2前面的exp1
后顾:
(?<=exp2)exp1 查找exp2后面的exp1
负前瞻:
exp1(?!exp2) 查找后面不是exp2的exp1
负后顾:
(?<!=exp2)exp1 查找前面不是exp2的exp1
举例:
js代码示例:
<script>
var str = "中国人";
var str2 = "法国人";
str = str.replace(/(?<=中国)人/, "rr") // 匹配中国人中的人,将其替换为rr,结果为 中国rr
str2 = str2.replace(/(?<=中国)人/, "rr") // 结果为 法国人,因为人前面不是中国,所以无法匹配到
console.log(str);
console.log(str2);
</script>
php代码示例:
<?php
$str = "中国人";
$str2 = "法国人";
echo preg_replace('/(?<=中国)人/','rr',$str); // 中国rr
echo preg_replace('/(?<=中国)人/','rr',$str2); // 法国人
?>

要理解?:则需要理解捕获分组和非捕获分组的概念:
()表示捕获分组,()会把每个分组里的匹配的值保存起来,使用$n(n是一个数字,表示第n个捕获组的内容)
(?:)表示非捕获分组,和捕获分组唯一的区别在于,非捕获分组匹配的值不会保存起来
举例:

js代码示例:

<script>
// 数字格式化 1,123,000
var str = "1234567890";
str = str.replace(/\B(?=(?:\d{3})+(?!\d))/g, ",") // 结果:1,234,567,890,匹配的是后面是3*n个数字的非单词边界(\B)
console.log(str);
</script>
php代码示例:
<?php
$str = "1234567890";
echo preg_replace('/\B(?=(?:\d{3})+(?!\d))/',',',$str); // 1,234,567,890
?>



版权声明:本篇文章来源于网络。 来源链接

相关推荐
正则表达式中\Q和\E的用法
正则表达式 | 2019-05-10 3955
\l 下个字符小写  \L 接着的字符均小写直到\E  \u 下个字符大写  \U 接着的字符均大写直到\E  \Q 在non-word 字符前加上\,直到\E  \E 结束\L,\E和\Q  m/\Q$name\E/:表示元字符常量化, 即在$sizename里的元字符*...
正则表达式命名子组/(?P<num>\d+)/
正则表达式 | 2019-05-10 3582
在 PHP 4.3.3 中,可以对子组使用 (?P<name>pattern) 的语法进行命名。 这个子模式将会在匹配结果中同时以其名称和顺序(数字下标)出现, PHP 5.2.2中又增加了两种味子组命名的语法: (?<name>pattern) 和 (?’name’pattern)。 示例: <...
评论:0条
评论加载中...
发表评论