正则表达式,实现if...then...else
正则
表达
编程技术
发布日期
2023-08-28
更新日期
2023-08-28
阅读次数 128
文章字数 904
正则的分支符号为|,例如 (a|b) 表示a或者b
在这个基础上,加上环视语法【也称零宽断言,不会占用字符】
先讲一讲零宽断言,零宽断言都是非捕获型。和我们已知的 (?:) 有点相似,不过(?:)仅方便组织正则表达式
环视就是前瞻后顾,找一个合适的位置
一、A(?=B) 查找后面是B的A,正前瞻
二、A(?!B) 查找后边不是B的A,负前瞻
三、(?<=B)A 查找前面是B的A,正后顾
四、(?<!B)A 查找前面不是B的A
说一下if分支语法
完整语法:(?(?=Expression)yes|no)
缩写:(?(Expression)yes|no)
这里的|no不存在时可以省略
一个比较完整的参考文档:正则表达式语言 - 快速参考 | Microsoft Learn
一个完整的php正则表达式例子:
//已知数据为k=v,空格分开,并且v可能带单引号
$settings = “ENGINE=InnoDB CHARSET=utf8mb4 COMMENT='404触发记录'”;
//(?(?='))表示v是单引号开头,则'.*?',否则[\S]+
preg_match_all("/(\S+?)=(?(?=')('.*?')|([\S]+))/",$settings,$output);
sItemCount = count($output2[1]); //匹配的key,2是引号结果,3是非引号结果
$kvSettings = array();
for($i=0;$i<$sItemCount;$i++){
$kvSettings[$output2[1][$i]] = $output2[2][$i] ?: $output2[3][$i]; //先取引号,再取非引号
}
看起来很像的原子组
原子组(Atomic group)语法 (?> subexpression),表意“禁止回溯”。
它匹配过的子字符串不会再进行第二次尝试匹配。
例如,
(?>a*)abc 匹配 aabc:
(?>a*) —— aa
abc —— bc = fail
失败。
如果使用回溯语法 (?: subexpression),
(?:a*)abc 匹配 aabc:
(?:a*) —— aa
abc —— bc = fail
(回溯,减少前匹配)
(?:a*) —— a
abc —— abc
成功!
文章作者: 朱丰华
文章链接: https://smart.52dixiaowo.com/blog/post-484.html
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。
正则
表达
发表评论
相关推荐