【发布时间】:2017-12-11 12:45:24
【问题描述】:
任务很明确。在输入中我们有一个可变的正则表达式模式,它应该包含命名的子模式,在输出中我们需要得到一个子模式名称的数组:
function get_subpattern_names($any_input_pattern) {
// What pattern to use here?
$pattern_to_get_names = '/.../';
preg_match_all($pattern_to_get_names, $any_input_pattern, $matches);
return $matches;
}
那么问题是在上面的函数中使用什么作为$pattern_to_get_names?
例如:
get_subpattern_names('/(?P<name>\w+): (?P<digit>\d+)/');
应该返回:
array('name', 'digit');
P.S.:根据PCRE documentation,子模式名称最多由 32 个字母数字字符和下划线组成。
由于我们不控制输入模式,我们需要考虑所有可能的命名语法。根据PHP documentation,它们是:(?P<name>pattern)、(?<name>pattern) 和(?'name'pattern)。
我们还需要考虑嵌套子模式,例如:(?<name1>.*(?<name2>pattern).*)。
无需计算重复名称、保留外观顺序或获取数字、非捕获或其他类型的子模式。仅列出名称(如果存在)。
【问题讨论】: