Может ли регулярное выражение сделать это быстрее?

Я хочу загладить каждое слово и объединить его в одно слово, например:

home = Главная страница about-us = AboutUs

Вот функция, которую я использую в данный момент, может ли регулярное выражение сделать это лучше или эффективнее?

public function formatClassName($name)
{
 $name = str_replace('-', ' ', $name);
 $name = ucwords($name);
 $name = str_replace(' ', '', $name);
 return $name;
}

Ответ 1

Я не думаю, что регулярное выражение может использовать слова, поэтому вам все равно придется иметь два отдельных регулярных выражения, и я думаю, что с такими простыми случаями регулярные выражения излишние (думаю, охотящиеся белки с артиллерией). Этот код прост, понятен и понятен. НЕ СКАЖИТЕ ЭТО!

Ответ 2

С регулярным выражением вам, вероятно, придется использовать что-то "сложное", например preg_replace_callback (чтобы иметь возможность применить strtoupper или ucwords), что сделает ваш код хотя бы сложнее понять - и, возможно, медленнее, но самое главное, что ваш код легко понять.

Учитывая, что ваше решение работает, просто и легко, я бы, вероятно, сохранил его, если бы был на вашем месте.

Ответ 3

Этот код работает:

$in = Array("home", "about-us");
foreach ($in as $a) {

  ## this is the line you're looking for
  $out = preg_replace('/-?\b(.)/e', "strtoupper('$1')", $a);

  echo "$a  = $out<br/>";
}

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