Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php regex可以更快地完成这项工作吗?_Php_Regex - Fatal编程技术网

Php regex可以更快地完成这项工作吗?

Php regex可以更快地完成这项工作吗?,php,regex,Php,Regex,我想将每个单词大写,并将其组合成一个单词,例如: 主页=主页 关于我们 这是我目前使用的函数,regex能做得更好或更有效吗 public function formatClassName($name) { $name = str_replace('-', ' ', $name); $name = ucwords($name); $name = str_replace(' ', '', $name); return $name; } 我不认为正则表达式可以大写,所以你仍然需要有两个独立

我想将每个单词大写,并将其组合成一个单词,例如:

主页=主页
关于我们

这是我目前使用的函数,regex能做得更好或更有效吗

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

我不认为正则表达式可以大写,所以你仍然需要有两个独立的正则表达式,我认为对于这样简单的情况,正则表达式是过分的(想想用大炮猎杀松鼠)。此代码简单、清晰且易于理解。别碰它

使用regex时,您可能需要使用一些“复杂”的东西,例如(能够应用
strtoupper
ucwords
函数),这至少会使代码更难理解,也可能会更慢,但最重要的是,您的代码易于理解

考虑到您的解决方案能够正常工作并且简单易行,如果我是您的话,我可能会保留它。

此代码有效:

$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/>";
}
$in=Array(“家”、“关于我们”);
foreach($a){
##这就是你要找的那条线
$out=preg_replace(“/-?\b()/e)”,“strtoupper(“$1”),$a);
回声“$a=$out
”; }

但我怀疑它是否更快,我同意其他评论者的看法,即它不一定更好。将三行代码减少为一个多毛的regexp只有在你是的情况下才是好的。

RegEx可以大写第一个字母,但你的建议完全正确,KISS。显然,你从来没有用大炮猎杀过松鼠;)您可以将word大写为
preg
,因为您可以传递
/e
标志,并将PHP代码作为“替换项”。@KennyTM:我没有想到这一点,但是让正则表达式处理器调用一段外部自定义代码似乎有点作弊。