Ale*_*spo 4 php regex string preg-replace
我目前正在使用此正则表达式替换字符串中的所有非字母数字字符,并用短划线替换它们
$newString = preg_replace("/[^a-z0-9.]+/i", "-", $string);
Run Code Online (Sandbox Code Playgroud)
这适用于以下字符串.
$string = "this will work fine";
$newString = "this-will-work-fine";
Run Code Online (Sandbox Code Playgroud)
但是如果字符串有一个非字母数字作为最后一个字符,它将匹配并替换它,正如人们所怀疑的那样.
$string = "How can I fix this?";
$newString = "How-can-I-fix-this-";
Run Code Online (Sandbox Code Playgroud)
如何改进此正则表达式以获得以下输出?
$newString = "How-can-I-fix-this";
Run Code Online (Sandbox Code Playgroud)
正则表达式应该适用于这两种情况.我知道我可以用一个单独的函数来修剪字符串,但理想情况下我想使用一个正则表达式.这有可能吗?
由于您使用的是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";
Run Code Online (Sandbox Code Playgroud)
打印:
How-can-I-fix-this
这实际上只不过是两次连续替换:
$string = "How can I fix this?";
echo preg_replace('/[^0-9a-z.]+/', '-', preg_replace('/[^0-9a-z.]+$/', '', $string)) . "\n";
Run Code Online (Sandbox Code Playgroud)