条件:如果在行的开头有一个数字,从行的末尾得到一个字母。
模式计划:
(?(IF)THEN)实现:http://sandbox.onlinephpfunctions.com/code/b2ea5d6112e546de704528add3c6f3f5f20a0af4
$a = '645 sdfjh';
preg_match("/(?(^[0-9])[a-z]$)/", $a, $var);
var_dump($var);错误:编译失败:断言预期后(?)(在偏移量3.
发布于 2018-03-12 13:40:14
PCRE从其早期的实现开始就支持条件子模式。构建它的主要问题是https://pcre.org/pcre.txt
有四种条件:对子模式的引用、对递归的引用、称为定义的伪条件和断言。
因此,将其更改为正的前瞻性断言并插入.*以移至输入字符串的末尾将使其工作:
^(?(?=\d).*\K[a-z]$)发布于 2018-03-12 13:19:09
看来IF必须是零宽度断言
(?(?=[0-9]).*([a-z]$))链接更新
发布于 2018-03-12 13:21:22
<?php
$a = '645 sdfjh';
if (preg_match("/^\d.*([a-z])$/", $a, $var)) {
var_dump($var[1]); # => "h"
}
$a = 'x645 sdfjh';
if (preg_match("/^\d.*([a-z])$/", $a, $var)) {
var_dump($var[1]); # => won't be executed
}
?>https://stackoverflow.com/questions/49236108
复制相似问题