現在測試似乎是爲了避免我不想要的字符而工作,但它只返回2的數字。我知道爲什麼,我只是不知道如何解決它。問題是最後一個?被排除在外,因爲第二場比賽的實際比賽是(?+
,所以它與第三場比賽不匹配,因爲該模式沒有「開始」字符,它只是?)
。PHP preg_match_all沒有字符或不是某個字符
$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
所有?
與?
不是由字母,數字,引號括起來,和蜱。
這是一個重要的實際模式:
[^\w\d'\"'`]
更新: 對於其他人來說,miken32的解決方案是,以上述模式轉換爲:
(?=[^\w\d'\"'`])
您是否只想匹配'?',因爲現在您的匹配不止於此。 –
@ l'l是的,只有?的。這用於分析參數化查詢。 – Devon
你也是匹配'\ s','(','+'太...如果你只想匹配'?'而沒有別的,我想你可以用'(?= [^ \ w \ d'\「\'])\?'。第二個你似乎沒有必要。 –