下面是一个样本串:PHP preg_match_all() - 我的正则表达式出了什么问题?
---------
SAY WHAAAAT
MEDICS:
CREW ID: PMD205304 CREW MEMBER ROLE: PRIMARY PATIENT CAREGIVER CREW MEMBER LEVEL: EMT-PARAMEDIC
CREW ID: EMT530755 CREW MEMBER ROLE: OTHER CREW MEMBER LEVEL: EMT-BASIC
这是执行preg_match_all()和平移$匹配阵列分成更可用阵列的功能:
private function getMedics(){
if(isset($this->record->elements["E04"])){
//REGEX:
$ptn = "/(?:CREW ID: (.+?))*(?:CREW MEMBER ROLE: (.+?)\s+)*(?:CREW MEMBER LEVEL: (.+))?\n/";
$str = $this->record->incidentRow['Narrative']; //Column where medic info is stored in CodeZoneIncidents table
preg_match_all($ptn,$str,$matches);
foreach($matches as $key => $val){
foreach($matches[$key] as $key2 => $val2){
if(trim($val2) != ""){
$tmp[$key2]['ID'] = $matches[1][$key2];
$tmp[$key2]['role'] = $matches[2][$key2];
$tmp[$key2]['level'] = $matches[3][$key2];
}
}
}
$ii = 0;
foreach($tmp as $key => $val){
$CZMedics[$ii]['ID'] = $tmp[$key]['ID'];
$CZMedics[$ii]['role'] = $tmp[$key]['role'];
$CZMedics[$ii]['level'] = $tmp[$key]['level'];
$ii++;
} //REGEX pattern
$iterations = $this->eleQTY($this->record->elements["E04"]); //Return how many E04 there are
for($i=0; $i<$iterations; $i++){
//[E04][0] if there are multiples:
$tmpEle = (isset($this->record->elements["E04"][$i])?$this->record->elements["E04"][$i]:$this->record->elements["E04"]);
//Populate Actual values:
if(isset($tmpEle["E04_01"]->code)){
$tmpEle["E04_01"]->actual = fncIsSet($CZMedics[$i]['ID']); //Medic ID
$tmpEle["E04_01"]->CZCellName = "Narrative_Box"; //CZPopUp Box
}
if(isset($tmpEle["E04_02"]->code)){
$tmpEle["E04_02"]->actual = fncIsSet($CZMedics[$i]['role']); //Role
$tmpEle["E04_02"]->CZCellName = "Narrative_Box"; //CZPopUp Box
}
if(isset($tmpEle["E04_03"]->code)){
$tmpEle["E04_03"]->actual = fncIsSet($CZMedics[$i]['level']); //Level
$tmpEle["E04_03"]->CZCellName = "Narrative_Box"; //CZPopUp Box
}
}
echo "<pre style='display:none;'>!!!";
print_r($CZMedics);
echo "</pre>";
}
}
这里是所得到的数组:
Array
(
[0] => Array
(
[ID] => PMD205304
[role] => PRIMARY PATIENT CAREGIVER
[level] => EMT-PARAMEDIC
)
[1] => Array
(
[ID] =>
[role] =>
[level] =>
)
)
所以w ^我想要的帽子是返回所有的医疗信息(ID,角色&等级),但我不希望该模式依赖任何一个信息在那里 - 所以它应该返回医生,如果其中任何一个数据点存在。
就扔掉换行符在你的正则表达式,即尾随'\ N'。你最后的数据行后面不一定有换行符,似乎是你的情况。 – erisco 2011-03-24 17:52:51
'阵列 ( [0] =>数组 ( [ID] => PMD205304 [作用] => PRIMARY [等级] => ) [1] =>数组 ( [ID] => [作用] => [等级] => EMT-护理人员 ) [2] =>数组 ( [ID] => EMT530755 [作用] => OTHER [等级] => EMT -BASIC ) ) ' – jreed121 2011-03-24 18:01:04
这就是我所得到的,现在认为有3名医务人员 – jreed121 2011-03-24 18:01:50