php中的多个regexp替换

php中的多个regexp替换,php,regex,Php,Regex,我需要对字符串执行大量替换:删除非字母数字字符,删除重复空格,并将单个单词的第一个字符大写。为所有3个任务创建一个regexp表达式是一种好的做法,还是如果我将其拆分为3个单独的preg\u replace命令,性能会受到影响?通常操作越少越好,但是我认为在它产生任何明显的变化之前,您需要处理数以百万计的字符串通常操作越少越好,但我认为在它产生任何明显的变化之前,您需要处理数以百万计的字符串一般来说,使代码更易于维护但效率稍低一点更可取。在这里,您可以选择一个难以调试的庞大正则表达式,或者3个非

我需要对字符串执行大量替换:删除非字母数字字符,删除重复空格,并将单个单词的第一个字符大写。为所有3个任务创建一个regexp表达式是一种好的做法,还是如果我将其拆分为3个单独的preg\u replace命令,性能会受到影响?

通常操作越少越好,但是我认为在它产生任何明显的变化之前,您需要处理数以百万计的字符串

通常操作越少越好,但我认为在它产生任何明显的变化之前,您需要处理数以百万计的字符串

一般来说,使代码更易于维护但效率稍低一点更可取。在这里,您可以选择一个难以调试的庞大正则表达式,或者3个非常简单的正则表达式,我每次都会选择后者。除非解析数以百万计的字符串,否则可能不会注意到性能差异


如果您想阅读一些好的文章,这种在代码正常工作之前尽可能提高效率的驱动力被称为。

一般来说,让代码更易于维护但效率稍低一点是可取的。在这里,您可以选择一个难以调试的庞大正则表达式,或者3个非常简单的正则表达式,我每次都会选择后者。除非解析数以百万计的字符串,否则可能不会注意到性能差异


如果您想阅读一些好的文章,在它们正常工作之前尽可能提高效率的驱动程序称为。

前两个使用两个正则表达式,然后使用。前两个操作不适合组合,它们是根本不同的一个替换为零,一个替换为匹配的单个字符。然后,使用ucwords避免使用另一个正则表达式

$result = preg_replace('/[^a-z\s]/i', '', $subject);
$result = preg_replace('/(\s)\s+/i', '$1', $result);
$result = ucwords( $result);

对前两个使用两个正则表达式,然后使用。前两个操作不适合组合,它们是根本不同的一个替换为零,一个替换为匹配的单个字符。然后,使用ucwords避免使用另一个正则表达式

$result = preg_replace('/[^a-z\s]/i', '', $subject);
$result = preg_replace('/(\s)\s+/i', '$1', $result);
$result = ucwords( $result);

注意:你可以用ucwords大写每个单词,你不需要正则表达式。好吧,答案是它取决于:它取决于你表达的效率。有许多人试图编写正则表达式的方法会导致效率低下。通过添加第二个但同样低效的子句,使一个已经低效的正则表达式的长度增加一倍,这将成倍地提高低效率,通常包括所谓的“灾难性回溯”。但是,通常情况下,使用单独的表达式执行单独的操作对性能的影响不是很显著,这非常值得进行可维护性改进。注意:您可以使用ucwords将每个单词大写,您不需要正则表达式。好的,答案是这取决于:它取决于表达式的效率。有许多人试图编写正则表达式的方法会导致效率低下。通过添加第二个但同样低效的子句,使一个已经低效的正则表达式的长度增加一倍,这将成倍地提高低效率,通常包括所谓的“灾难性回溯”。但是,一般来说,使用单独的表达式执行单独的操作对性能的影响不是很显著,这非常值得进行可维护性改进。抱歉,我没有测试它,只是下定决心编写了它=D@Ismael-,这将导致无效输出。您需要一个围绕第一个\s的捕获组。我将使用修改后的版本而不是我的版本,因为我的捕获组将只捕获组的最后一次迭代。谢谢对不起,我没有测试,只是下定决心写了下来=D@Ismael-,这将导致无效输出。您需要一个围绕第一个\s的捕获组。我将使用修改后的版本而不是我的版本,因为我的捕获组将只捕获组的最后一次迭代。谢谢