现在,测试似乎正在努力避免我不想要的字符,但它只返回2的数量。我知道为什么,我只是不知道如何解决它。问题是最后一个?被排除,因为第二场比赛的实际匹配是(?+
所以它与第三场比赛不匹配,因为该模式没有“开始”字符,它只是?)
。
$pattern = "/([^\w\d'\"`]\?[^\w\d'\"`])/";
$subject = "`test` = ? and `other` = (?+?)";
$count = preg_match_all($pattern, $subject, $matches);
echo "Count: $count\n"; // echoes 2 instead of 3
基本上,我想要计算所有使用的参数,因此请将?
中的所有$subject
与?
匹配,不要包含字母,数字,引号和刻度。< / p>
这是重要的实际模式:
[^\w\d'\"'`]
更新 对于其他人来说,miken32的解决方案是将上述模式转换为:
(?=[^\w\d'\"'`])
答案 0 :(得分:1)
尝试使用lookahead assertion:
$pattern = "/((?<=[^\w\d'\"`])\?(?=[^\w\d'\"`]))/";
如果没有向前推进搜索,它将展望未来。
编辑也添加了lookbehind断言。