2014-02-18 5 views
0

Я работаю на пути, чтобы передать переменные в уведомлении, и для достижения этой цели, я в настоящее время переживает сообщения один раз следующим способом:Регулярное выражение для замены

private static function set($var, $content, &$message) { 
    $message = str_replace("{{" . $var . "}}", $content, $message); 
} 

Это правильно соответствует ; если у меня есть {{name}} 'внутри сообщения, и я запускаю метод ниже, все экземпляры' {{name}} 'правильно заменяются' Johnny Test '. Splendid.

self::set('name', 'Johnny Test', $message); 

Я сейчас стремится расширить это, чтобы обеспечить возможность поля шаблона не переходила в уведомлении. То есть, если мне нужно «имя» и «электронная почта» для конкретного уведомления, но только «имя» будет передано, я хочу, чтобы значение по умолчанию («Нет адреса электронной почты») было передано (вместо уведомления, показывающего «{ {Эл. адрес}}').

С этой целью я придумал следующее с помощью this tool:

$returnValue = preg_replace(
    '/\\{\\{.*?\\:\\s*?[\'"](.*?)[\'"]\\s*?\\}\\}/', 
    '$1', 
    '{{color : "No color selected"}}' 
); 

Однако, это не надлежащим образом совпадают. Вместо $returnValue, содержащего «Не выбран цвет», вместо этого он содержит полный цвет «{{цвет:« Не выбран цвет »}} '.

Что мне не хватает?

ответ

2

У вас слишком много обратных косых черт. Вы работаете с одинарными кавычками, поэтому только \ не имеет особого значения.

Поэтому:

'/\{\{.*?:\s*[\'"](.*?)[\'"]\s*\}\}/' 

Если это сделать.

+0

Ха-ха, да! Оказалось, что инструмент, который я использовал, добавлял лишнюю обратную косую черту (я закончил использование writecodeonline, чтобы написать его, и все это сработало). Спасибо, что заметили это! –

2

Это должно работать:

$returnValue = preg_replace(
    '/{{[^:]*:\s*[\'"]([^\'"]*)[\'"]\s*}}/', 
    '$1', 
    '{{color : "No color selected"}}' 
); 
+0

Также хорошее решение! Это делает выражение более жадным (точнее, менее неотразимым). –

Смежные вопросы