обращая регулярное выражение в php - PullRequest
0 голосов
/ 02 апреля 2011

предположим, у меня есть эта функция:

function f($string){
    $string = preg_replace("`\[.*\]`U","",$string);
    $string = preg_replace('`&(amp;)?#?[a-z0-9]+;`i','-',$string);
    $string = htmlentities($string, ENT_COMPAT, 'utf-8');
    $string = preg_replace( "`&([a-z])(acute|uml|circ|grave|ring|cedil|slash|tilde|caron|lig|quot|rsquo);`i","\\1", $string );
    $string = preg_replace( array("`[^a-z0-9]`i","`[-]+`") , "-", $string);
    return $string;
}

как я могу изменить эту функцию ... т.е. Как мне написать функцию fReverse (), чтобы у нас было следующее:

$s = f("some string223---");
$reversed = fReverse($s);
echo $s;

и вывод: некоторая строка223 ---

1 Ответ

7 голосов
/ 02 апреля 2011

f с потерями.Невозможно найти точную обратную сторону.Например, и "some string223---", и "some string223--------" дают одинаковый вывод (см. http://ideone.com/DtGQZ).


Тем не менее, мы можем найти предварительное изображение f. 5 заменf:

  1. Обрезать все между [ и ].
  2. Заменить сущности, такие как <, {, и закодированные сущности, такие как <, надефис -.
  3. Выход из специальных символов HTML (<&lt;, &&amp; и т. д.)
  4. Удаление акцентов с символами ударения (&eacute; (= é) → e и т. д.)
  5. Превратить не алфавитно-цифровые и последовательные дефисы в один дефис -.

Из них возможно, что 1, 2, 4 и 5 - преобразования личности. Поэтому одним из возможных прообразов является только обратный шаг 3:

function fReverse($string) {
   return html_entity_decode($string, ENT_COMPAT, 'utf-8');
}
...