заменить все смайлики перечислением в php - PullRequest
0 голосов
/ 18 августа 2010

Существует ли какой-либо быстрый (основанный на регулярных выражениях) метод, позволяющий заменить все смайлики в тексте, каждый из которых имеет уникальный уникальный идентификатор? Например, первое вхождение :) должно быть заменено smiley1, the :)) на smiley2, а другое вхождение :) снова smiley1? Кроме того, идентификатор должен быть одинаковым с использованием другого текста для ввода

Любая потенциальная комбинация типичных символов (<5 символов?), Таких как:; - () &%} {[] D <> 30_o, должна быть распознаваемой.

Можно ли это сделать без генерации большого массива всех комбинаций? В случае, как?

Ответы [ 4 ]

1 голос
/ 18 августа 2010

Вы ищете preg_replace_callback () ?Вы даже можете использовать замыкания в php 5.3.Мне не ясно, какова цель, поэтому на данный момент это лучшее, что я могу предоставить, если вы можете уточнить, тогда, возможно, я смогу увидеть, что я могу придумать для примера кода.Вот пример из руководства по PHP.Специально в этом случае не помогает, но если вы просто измените регулярное выражение, функцию и строку (в основном все, lol), то это сделает работу:

<?php
echo preg_replace_callback('/-([a-z])/', function ($match) {
    return strtoupper($match[1]);
}, 'hello-world');
// outputs helloWorld
?>
0 голосов
/ 18 августа 2010

Да, Тим!Это именно то, что пришло мне в голову при написании последнего поста.Таким образом, решение

<?php
    echo preg_replace_callback("/([\)\(\[\]<>#-\.:;*+{}]{2,9})/", function ($match) {
        return " ".md5($match[1])." ";
    }, ':::-) :-)) nope (yeah) cool:) }:)');
?>

Спасибо!

0 голосов
/ 18 августа 2010

Очевидно, что это невозможно сделать с помощью такого str_replace. Как бы вы получили ":)))" или, может быть, "-.-", которого также нет в вашем списке? Перечисление всех потенциальных смайликов - сложная задача, в результате чего n! / (N-k)! кандидатов. Здесь в приведенном выше примере n = 18 и k = 5 ... Таким образом, я прошу способ использования регулярных выражений, но я не могу заменить каждую комбинацию символов, которая каждый раз предназначена для представления смайлика одним и тем же текстом.

Идея: возможно ли использовать функцию обратного вызова в сочетании с хешем?

0 голосов
/ 18 августа 2010

Я не понимаю, почему вы не можете сделать:

str_replace(":))","<img src=\"smiley1.jpg\">",$STRING)
str_replace(":)","<img src=\"smiley2.jpg\">",$STRING)

и т.д ... представляется наиболее простым и логичным решением

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...