我需要让用户为使用 vsprintf 的函数指定自定义格式,并且由于 PHP 没有 glibc 的 register_printf_function(),所以我必须使用 PCRE 来完成。
我的问题是,什么是匹配 % 后跟任何字符并且之前没有 % 的最佳 REGEXP 以一种可用的方式用于之后的程序化使用?
我能得到的最接近的解决方案是:
<?php
function myprintf($format,$args) {
$matches = array();
preg_match_all('/((?<!%)%*[^%]+)/', $format,$matches,PREG_OFFSET_CAPTURE|PREG_PATTERN_ORDER);
print_r($matches);
}
myprintf("begin%a%%b%%%c%d",NULL);
哪种方法可行,但是这会被“%%%c”之类的输入“混淆”。我想在一个分组中包含一系列两个 % 符号(即转义),例如:
Array (
0 => '%%',
1 => '%c'
)
而不是现在这样做: Array ( 0 => '%%%c' ) 也就是说,我需要保持输入完整,尽管已标记化,以便在处理自定义 printf 后将各个部分连接在一起我在输入中遇到的格式。
谢谢,
弗拉维乌斯
PS:“用户”实际上是另一个程序员。我知道安全隐患。