我希望能夠驗證下面的字符串以允許無限次的反向數據之間的數據,只要它後跟一個逗號,如果它不是逗號必須是「)」。只有反引號中才允許空格不在其中。使用preg_match重複模式
我沒有經驗過正則表達式,所以我不知道如何讓重複模式。以下是我的模式。
感謝
修訂
// first 3 lines should match
$lines[] = "(`a-z0-9_-`,`a-z0-9_-`,`a-z0-9_-`,`a-z0-9_-`)";
$lines[] = "(`a-z0-9_-`, `a-z0-9_-` ,`a-z0-9_-` , `a-z0-9_-`)";
$lines[] = "(`a-z0-9_-`,
`a-z0-9_-`
,`a-z0-9_-` ,`a-z0-9_-`)";
// these lines below should not match
$lines[] = "(`a-z0-9_-``a-z0-9_-`,`a-z0-9_-`,`a-z0-9_-`)";
$lines[] = "(`a-z0-9_-``a-z0-9_-`,`a-z0-9_-`.`a-z0-9_-`";
$pattern = '/~^\(\s*(?:[a-z0-9_-]+\s*,?\s*)+\)$~/';
$result = array();
foreach($lines as $key => $line)
{
if (preg_match($pattern, $line))
{
$result[$key] = 'Found match.';
}
else
{
$result[$key] = 'Not found a match.';
}
}
print("<pre>" . print_r($result, true). "</pre>");
我在我的文章更新我的代碼,比較遺憾的是這是一個有點曖昧。這沒有找到匹配的任何行。有任何想法嗎? – arbme
對不起,我使用了SO的內聯代碼括號,這些代碼是back-tics,因此它們在我的模式中沒有正確顯示。我改變了他們的另一種形式,所以你應該看看它的方式。同樣在我的模式中,我使用波浪號〜作爲模式分隔符,並且在代碼更新中看到您添加了正斜槓。因此,您需要刪除外部正斜槓或其他波形 –
我繼續前進並編輯我的模式以使用/而不是〜因此它顯示了您應該具有的內容,因爲您被分隔符弄糊塗 –