Может ли регулярное выражение сделать это быстрее? - PullRequest
11 голосов
/ 03 февраля 2010

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

дом = дом
about-us = AboutUs

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

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

Ответы [ 3 ]

29 голосов
/ 03 февраля 2010

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

12 голосов
/ 03 февраля 2010

В регулярном выражении вам, вероятно, придется использовать что-то «сложное», например preg_replace_callback (чтобы можно было применить функцию strtoupper или ucwords), что сделает ваш код, по крайней мере, более трудным для понимания - и, возможно, медленнее, но самое главное, что ваш код легко понять.

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

4 голосов
/ 03 февраля 2010

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

$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/>";
}

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

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