条件: 如果该行的开头有一个数字,请从该行的末尾获得一个字母。
模式方案:
(?(IF)THEN)
实施:http://sandbox.onlinephpfunctions.com/code/b2ea5d6112e546de704528add3c6f3f5f20a0af4
$a = '645 sdfjh';
preg_match("/(?(^[0-9])[a-z]$)/", $a, $var);
var_dump($var);
错误: 编译失败:断言后预期(?(在...中的偏移3处
)答案 0 :(得分:1)
PHP PCRE一直在支持条件子模式的早期实现。构建它的方法的主要问题是condition [PCRE.ORG]:
有四种情况:对子模式的引用, 引用递归,一个叫做DEFINE的伪条件,和 断言。
因此将其更改为正向前瞻断言并插入.*
以移动到输入字符串的末尾将使其工作:
^(?(?=\d).*\K[a-z]$)
答案 1 :(得分:0)
答案 2 :(得分:0)
<?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
}
?>
答案 3 :(得分:0)
你可以试试这个:
<?php
$a = '645 sdfjh';
if(preg_match("/^[0-9]/", $a)){
var_dump(substr($a, -1));
}
希望这对你有所帮助。
答案 4 :(得分:0)
请尝试以下代码:
你的模式有问题。
见下面的代码。这对你有帮助。
这样可以正常工作。
$a = '645 sdfjh';
preg_match('/[^a-z_\-0-9]/i', $a, $var);
if($var == true)
{
echo substr($a, -1);
}else
{
echo 'not matched';
}