PHP preg_match_all没有字符或没有某个字符

时间:2015-09-25 22:42:52

标签: php regex

现在,测试似乎正在努力避免我不想要的字符,但它只返回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'\"'`])

1 个答案:

答案 0 :(得分:1)

尝试使用lookahead assertion

$pattern =  "/((?<=[^\w\d'\"`])\?(?=[^\w\d'\"`]))/";

如果没有向前推进搜索,它将展望未来。

编辑也添加了lookbehind断言。