php中的特定字符串格式

时间:2011-09-13 13:37:12

标签: php regex string-formatting

我有以下格式的一系列字符串。

temp_low_warning

我正在使用此代码生成

警告,温度过低!

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

使用正则表达式有更好的方法吗?我更关心表现;此脚本作为执行频繁执行的cron作业的一部分运行。

所以我想我的第一个问题是:

可以使用正则表达式完成吗?

第二个问题:

应该使用正则表达式吗?

4 个答案:

答案 0 :(得分:3)

  1. 是的,将文本与固定数量的分隔符匹配是非常可行的。 /(\ w *)_(\ w *)_(\ w *)/是一个适合你的例子的例子。
  2. 不,你的例子中爆炸的意义非常清楚。这里不需要完整模式匹配的可表达性。
  3. 由于您的cron-job需要为每次调用启动php,因此性能很可能不会引起关注。正则表达式与爆炸性差异不会是显而易见的。

答案 1 :(得分:2)

我会保留你的代码。

如果你绝对想要重构它,我会将大写字母应用到$parts来制作 明确它适用于所有数组项目。

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

我会远离正则表达式来做类似的任务,建议进入php在线参考本身(性能和清晰度问题)

答案 2 :(得分:1)

该代码花了0.0003秒在我的机器上运行。您确定需要进一步优化吗?

关于你的问题,答案是否定的。

答案 3 :(得分:1)

没有大写:

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

我不确定是否有一种简单的方法可以大写。

如果在循环中经常执行此命令,则使用正则表达式时性能可能会略有提高。但是,如此短的字符串应该不那么重要。