Witam,
Problem dla lubiących się sprawdzić w optymalizacji regexów :)
Zamienić w tekście¹ nieprawidłowe wielokropki "" na poprawne ".", z rozróżnieniem wielokropka i wykropkowania (zastąpienia brakujących liter kropkami). Optymalizacja pod względem czasu wykonania.
Przykładowy tekst, który powinien być obsłużony: $string = 'poprzedni to jest. [] bdzo ciekawy, "nawet fajny" "ładny" tekst testowy "No, no". zaczęty .dokończony końcowy';
Po poprawce powinien wyglądać tak: _poprzedni to jest. _ [] bdzo ciekawy, "nawet fajny_" "ładny"_ tekst testowy_ "No, no_". zaczęty_ _dokończony końcowy_ (dla poprawienia czytelności zastąpiłem prawidłowe wielokropki znakiem "_")
Moje rozwiązanie, z którego nie jestem zbytnio zadowolony, bo używa aż czterech regexów: /** * Fix ellipsis public string $string input string string */ public function fixEllipsis($string, $language = 'pl') { if (in_array($language, $this->_supportedLanguages)) { // at the end of the word $output = preg_replace('/([\.])\.{3}([\s"">'])/u', '\\1_\\2', $string); // at the beginning of the word $output = preg_replace('/([\s""'>'])\.{3}([\.])/u', '\\1_\\2', $output); // at the end of the string $output = preg_replace('/\.{3}$/', '_', $output); // at the beginning of the string $output = preg_replace('/\.{3}/', '_', $output); } else { $output = $string; } return $output; }
¹ tekst - ciąg unicode, bez HTML, napisany ~zgodnie z regułami j.polskiego
regex - wielokropki
pyt
Q