Я застрял!Как я могу убедиться, что код имеет все возможности?
Код ищет слова или предложения с preg_match_all, а затем заменяет слова и преобразует единицы измерения.
Длинный текст становится $Lines[]
через explode("\n", $Long_Text);
А для контура проходит через $ 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 оварищу 1a, 1b, 1c, 2a, 2b, 3c, 4а: Под Hela perioden Latt до måttlig isbildning Mellan 1500ft оч FL090. Område 3a, 3b: I början av perioden lätt до måttlig isbildning mellan FL060 och FL090.I mitten och mot slutet av perioden lätt до måttlig isbildning mellan 1500ft och FL090. Område 4b: Mot slutet av perioden lätt до måttlig isbildning mellan FL060 och FL090.
Sikt/Погода внутри/Moln оварищу 2a: Под HeLa perioden sikt OVER 8 км, lokalt 3000-5000m я snöfall. Molnbas över 2000 футов, lokalt 1500-2000 футов. Molnöversida FL125. Område 1b: I början av perioden sikt över 8km, lokalt under 1500m i dis. Molnbas över 2000 футов, lokalt 500-1000 футов. Molnöversida> FL125. I mitten och mot slutet av perioden sikt över 8km, lokalt 1500-3000m i snöfall. Molnbas över 2000 футов, lokalt 1000-1500 футов. Molnöversida FL125. Område 4b, 4c: Под гелой период sikt över 8km. Молнбас - 2000 футов. Molnöversida: Ingen prognos. Område 3a, 3b: Под гелой период sikt över 8km. Молнбас - 2000 футов. Molnöversida> FL125. Område 1c, 2b, 3c, 4a: I början och mitten av perioden sikt över 8km, lokalt under 1500m i dis. Molnbas över 2000 футов, lokalt 500-1000 футов. Molnöversida> FL125. Mot slutet av perioden sikt över 8km, lokalt 3000-5000m i snöfall. Molnbas över 2000 футов, lokalt 1500-2000 футов. Molnöversida> FL125. Område 1a: Под гелой период sikt över 8km, lokalt 1500-3000m i snöfall. Molnbas över 2000 футов, lokalt 1000-1500 футов. 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.
Для вашего второго вопроса: '\ b (? (\ d +) - (\ d +) (?: ft | m | km))', см. [Demo here on regex101] (https: // regex101. com/r/kF4wM4/1) –
Jan
Спасибо! Это отлично работает. – Andreas