如果要包含所有字符中的“(-)”,我想要一个字符串。
以下代码检查字符串是否包含“(18-35)”之类的范围,如果是,则它将18放入$ min,将35放入$ max。
但是我的if语句是否也与“高加索/非西班牙裔”匹配。您如何解决此问题?
if (preg_match('(-)', $data[$demographicRequirement[$i]])){
if($demographicRequirement[$i] == "age_group" || $demographicRequirement[$i] == "Age" ||
$demographicRequirement[$i] == "Age_group" || $demographicRequirement[$i] == "age"){
preg_match_all('/\((.*)-/', $data[$demographicRequirement[$i]], $matches);
$min = intval($matches[1][0]);
preg_match_all('/\-(.*)\)/', $data[$demographicRequirement[$i]], $matches);
$max = intval($matches[1][0]);
$date = new DateTime('now');
date_sub($date,date_interval_create_from_date_string($min . " years"));
$minAge = date_format($date,"Y-m-d");
$date = new DateTime('now');
date_sub($date,date_interval_create_from_date_string($max . " years"));
$maxAge = date_format($date,"Y-m-d");
$whereCondition[] = "(" . "date_of_birth" . " BETWEEN '" . $maxAge . "' AND '" . $minAge . "')";
}else{
preg_match_all('/\((.*)-/', $data[$demographicRequirement[$i]], $matches);
$min = intval($matches[1][0]);
preg_match_all('/\-(.*)\)/', $data[$demographicRequirement[$i]], $matches);
$max = intval($matches[1][0]);
$whereCondition[] = "(" . $demographicRequirement[$i] . " BETWEEN " . $min . " AND " . $max . ")";
}
}else{
$whereCondition[] = $demographicRequirement[$i] . " ='" . $data[$demographicRequirement[$i]]. "'";
}
答案 0 :(得分:1)
因此,假设该字符串可以像您的示例一样包含空格,我想这就是您要查找的内容:
\((\d{1,2})\s*-\s*(\d{2})\)
现在细分:
每个部分作为捕获组括在括号中,因此您可以在$ matches数组中找到它们,[1]是您的$ min值,[2]是您的$ max值,这简化了解析。 / p>
将它们放在一起:
if(preg_match('/\((\d{1,2})\s*-\s*(\d{2})\)/', $data[$demographicRequirement[$i]], $matches) === 1) {
$min = $matches[1];
$max = $matches[2];
}
这匹配“(18-25)”,“(18-25)”和“(8-18)”,但没有文本。
希望有帮助