相关疑难解决方法(0)

1653
推荐指数
16
解决办法
66万
查看次数

使用命名模式子例程的PCRE正则表达式

我正在试验PHP的PCRE中的命名子模式/'子程序'正则表达式功能,我希望有人可以解释以下奇怪的输出:

$re = "/
(?(DEFINE)
    (?<a> a )
)

^(?&a)$

/x";

var_dump(preg_match($re, 'a', $match)); // (int) 1 as expected
var_dump($match); // Array( [0] => 'a' ) <-- Why?
Run Code Online (Sandbox Code Playgroud)

我无法理解为什么命名组"a"不在结果中(内容为"a").更改preg_matchpreg_match_all在匹配数据中放置"a"和"1",但两者仅包含空字符串.

我非常喜欢用这种方式编写正则表达式的想法,因为你可以使它们非常强大,同时保持它们非常易于维护(请参阅这个答案以获得一个很好的例子),但是如果子模式在匹配数据中不可用那么它不是真的很有用.

我在这里遗漏了什么,或者我应该哀悼可能发生的事情并继续前进?

php regex pcre

5
推荐指数
1
解决办法
2244
查看次数

标签 统计

regex ×2

capturing-group ×1

pcre ×1

php ×1

regex-group ×1