我被困住了!
代码使用preg_match_all查找单词或句子,然后替换单词并转换单位。
长文字通过$Lines[]
explode("\n", $Long_Text);
for循环遍历$ Lines。
If(preg_match_all)
查找该行是否包含其要查找的内容。
出现问题:
两个相同的preg_match_all()
都是正确的,但因为代码只在每一行上看一次,所以它会跳过它。
其他问题:
3500ft处理为500英尺,因为preg_match_all("/(\d{3,4})(ft)/", $Lines[$i], $output_array)
可以选择3位数。
如何强制它首先查找4位数字然后3位数字。
我唯一的选择是两个preg_matches,第一个是{4}
,下一个是{3}
吗?
示例Long_Text:
Isbildning Område1a,1b,1c,2a,2b,3c,4a:在helaperiodenlätt到måttlig isbildning mellan 1500ft och FL090。 Område3a,3b:我börjanavperiodenlätt直到måttligisbildning mellan FL060 och FL090.I mitten och mot slutet avperiodenlätttill måttligisbildningmellan 1500ft och FL090。 Område4b:Mot slutet avperiodenlätt直到måttligisbildning mellan FL060 och FL090。
SIKT /维德/ Moln Område2a:在hela periodensiktöver8km,lokalt 3000-5000m i snöfall。 Molnbasöver2000ft,lokalt 1500-2000ft。 Molnöversida FL125。 Område1b:我börjanavperiodensiktöver8km,lokalt 1500m以下我 DIS。 Molnbasöver2000ft,lokalt 500-1000英尺。 Molnöversida> FL125。一世 mitten och mot slutet av periodensiktöver8km,lokalt 1500-3000m i snöfall。 Molnbasöver2000ft,lokalt 1000-1500ft。 Molnöversida FL125。 Område4b,4c:在hela periodensiktöver8km。 Molnbasöver2000ft。 Molnöversida:Ingen的预测。 Område3a,3b:在hela periodensiktöver8km。 Molnbasöver2000ft。 Molnöversida> FL125。 Område1c,2b,3c,4a:Ibörjanochmitten av periodensiktöver8km, lokalt 1500m以下我dis。 Molnbasöver2000ft,lokalt 500-1000英尺。 Molnöversida> FL125。 Mot slutet av periodensiktöver8km,lokalt 3000-5000m我snöfall。 Molnbasöver2000ft,lokalt 1500-2000ft。 Molnöversida> FL125。 Område1a:在hela periodensiktöver8km,lokalt 1500-3000m i snöfall。 Molnbasöver2000ft,lokalt 1000-1500ft。 Molnöversida FL125。
for($i=0;$i<count($Lines);$i++) {
if(preg_match_all("/(MELLAN) (\d{2}) (OCH) (\d{2}) (UTC)/", $Lines[$i], $output_array)){
$Start = $output_array[1][0] . " " . $output_array[2][0] . " " . $output_array[3][0] . " " . $output_array[4][0] . " " . $output_array[5][0];
$Goal = $output_array[1][0] . " " . 1*($output_array[2][0]+$Diff) . " " . $output_array[3][0] . " " . 1*($output_array[4][0]+$Diff) . " SVENSK TID";
$Lines[$i] = str_replace($Start, $Goal, $Lines[$i]);
}
if(preg_match_all("/(\d{3,4}) (fot)/", $Lines[$i], $output_array)){
$Start = $output_array[1][0] . " " . $output_array[2][0];
$output_array[1][0] = ConvertMeter($output_array[1][0]);
$Goal = $output_array[1][0] . " meter";
$Lines[$i] = str_replace($Start, $Goal, $Lines[$i]);
}
if(preg_match_all("/(\d{3,4}) (ft)/", $Lines[$i], $output_array)){
$Start = $output_array[1][0] . " " . $output_array[2][0];
$output_array[1][0] = ConvertMeter($output_array[1][0]);
$Goal = $output_array[1][0] . " meter";
$Lines[$i] = str_replace($Start, $Goal, $Lines[$i]);
}
if(preg_match_all("/(\d{3,4})-(\d{3,4})(ft)/", $Lines[$i], $output_array)){
$Start = $output_array[1][0] ."-" . $output_array[2][0] . "ft";
$output_array[1][0] = ConvertMeter($output_array[1][0]);
$output_array[2][0] = ConvertMeter($output_array[2][0]);
$Goal = $output_array[1][0] . "-" . $output_array[2][0] . " meter";
$Lines[$i] = str_replace($Start, $Goal, $Lines[$i]);
}
if(preg_match_all("/(\d{3,4})(ft)/", $Lines[$i], $output_array)){
$Start = $output_array[1][0] . $output_array[2][0];
$output_array[1][0] = ConvertMeter($output_array[1][0]);
$Goal = $output_array[1][0] . " meter";
$Lines[$i] = str_replace($Start, $Goal, $Lines[$i]);
}
if(preg_match_all("/(FL)(\d{2,3})/", $Lines[$i], $output_array)){
$Start = $output_array[1][0] . $output_array[2][0];
$output_array[2][0] = ConvertMeter($output_array[2][0]*100);
$Goal = $output_array[2][0] . " meter";
$Lines[$i] = str_replace($Start, $Goal, $Lines[$i]);
}
if(strpos($Lines[$i], ">") !== false) $Lines[$i] = str_replace(">", "över ", $Lines[$i]);
}
我真的很讨厌stackoverflow上的格式化。
答案 0 :(得分:0)
我可以提出最丑陋的解决方案......
preg_match_all("/\b(\d+)(ft)/", $Lines[$i], $output_array);
$x = count($output_array[1]);
for($d=0;$d<$x;$d++){
if(preg_match_all("/\b(\d+)(ft)/", $Lines[$i], $output_array)){
$Start = $output_array[1][0] . $output_array[2][0];
$output_array[1][0] = ConvertMeter($output_array[1][0]);
$Goal = $output_array[1][0] . " meter";
$Lines[$i] = preg_replace("/".$Start."/", $Goal, $Lines[$i],1);
}
}
首先我preg_match它以查看“价值”是否存在。 我对数组进行了计数,并按照preg_match找到的值的次数启动了forloop。
它完成了这项工作,但它很难看。