gpt4 book ai didi

php - 正则表达式替换所有匹配项,除非匹配项位于字符串的末尾

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:05:56 26 4
gpt4 key购买 nike

我目前正在使用这个正则表达式来替换字符串中的所有非字母数字字符并将它们替换为破折号

$newString = preg_replace("/[^a-z0-9.]+/i", "-", $string);

对于以下字符串,这工作正常

$string = "this will work fine";
$newString = "this-will-work-fine";

但是如果字符串的最后一个字符是非字母数字,它将匹配并替换它,正如人们所怀疑的那样。

$string = "How can I fix this?";
$newString = "How-can-I-fix-this-";

如何改进此正则表达式以获得以下输出?

$newString = "How-can-I-fix-this";

正则表达式应该适用于两种情况。我知道我可以用一个单独的函数减少字符串,但理想情况下我想使用一个正则表达式。这可能吗?

最佳答案

由于您使用的是 PHP,因此您可以一次定义多个模式和替换。这是一个快速演示:

$string = "How can I fix this?";
$patterns = array('/[^0-9a-z.]+/i', '/[^0-9a-z.]+(?=$)/i');
$replacements = array('-', '');

echo preg_replace($patterns, $replacements, $string) . "\n";

打印:

How-can-I-fix-this

Which is really nothing more than two successive replacements:

$string = "How can I fix this?";

echo preg_replace('/[^0-9a-z.]+/', '-', preg_replace('/[^0-9a-z.]+$/', '', $string)) . "\n";

关于php - 正则表达式替换所有匹配项,除非匹配项位于字符串的末尾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14447397/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com