конкретное форматирование строки в php - PullRequest
1 голос
/ 13 сентября 2011

У меня есть ряд строк в следующем формате.

temp_low_warning

Я использую этот код для создания

Предупреждение, Temp Low!

$str = "temp_low_warning";
$parts = explode("_",$str);
$return = ucfirst($parts[2]) . ", " . ucfirst($parts[0]) . " " . ucfirst($parts[1]) . "!";

Есть ли лучший способ сделать это, используя обычныевыражения?Я больше беспокоюсь о производительности;этот скрипт выполняется как часть задания cron, которое выполняется довольно часто.

Итак, я думаю, мой первый вопрос:

Можно ли это сделать с помощью RegularВыражения?

Второй вопрос:

Должно ли это быть сделано с помощью регулярных выражений?

Ответы [ 4 ]

3 голосов
/ 13 сентября 2011
  1. Да, сопоставление текстов с фиксированным количеством разделителей вполне выполнимо./ (\ w *) _ (\ w *) _ (\ w *) / - один пример, который подходит вашему примеру.
  2. Нет, смысл взрыва очень ясен в вашем примере.Вам не нужна выразительность полного сопоставления с образцом здесь.

Скорее всего, производительность здесь не имеет значения, так как ваша задача cron должна запускать php для каждого вызова.Разница между регулярным выражением и разнесением не будет заметна.

2 голосов
/ 13 сентября 2011

Я бы оставил ваш код как есть.

Если вы абсолютно хотите провести рефакторинг, я бы применил заглавные буквы к $parts, чтобы сделать Понятно, что это относится ко всем элементам массива.

$str = "temp_low_warning";
$parts = array_map('ucfirst',explode("_",$str));
$return = $parts[2] . ", " . $parts[0] . " " . $parts[1] . "!";

И я бы держался подальше от регулярных выражений для выполнения аналогичных задач, как советовали в самой онлайн-справке php (вопросы производительности и ясности)

1 голос
/ 13 сентября 2011

Без заглавных букв:

preg_replace("/(\w+)_(\w+)_(\w+)/", "$3, $1 $2!", $string)

Я не уверен, есть ли простой способ использовать заглавные буквы, хотя.цикл, то может быть небольшое улучшение производительности при использовании регулярных выражений.Однако с такими короткими строками это не должно быть так важно.

1 голос
/ 13 сентября 2011

Этот код занял 0,0003 секунды для запуска на моей машине. Вы уверены, что вам нужно оптимизировать его дальше?

Что касается ваших вопросов, то ответов нет и нет.

...