用下划线替换一个或多个非字母数字字符[重复]

问题描述 投票:0回答:2

我期待着这个:

echo preg_replace('/[^a-zA-z0-9]*/', '_', ' foo Bar #1 -');

输出:

'foo_Bar_1_'

但是使用ideone [http://www.ideone.com/Q80v3],它输出:

'__f_o_o__B_a_r__1__'

我不明白为什么会这样,也不知道如何实现我想要的,它输出“foo_Bar_1_”。

如果我删除

*

echo preg_replace('/[^a-zA-z0-9]/', '_', ' foo Bar #1 -');

它输出:

'_foo_Bar__1__'

但我不想要惰性匹配(只有一个下划线pr.替换)。

php regex preg-replace alphanumeric snakecasing
2个回答
3
投票
<?php
    echo preg_replace('/[^\w\d]+/', '_', trim(' foo Bar #1 -'));
?>

输出:

foo_Bar_1_

2
投票

如果您使用

+
而不是
*

,似乎可以工作

编辑
实际上,它输出的是

_foo_Bar_1_
而不是
foo_Bar_1
。但是,我不知道是否有一种仅使用正则表达式的方法可以做到这一点。因为你在字符串的开头和结尾处给了它一些东西,你告诉它用下划线替换。

实际上做你想做的事情的最快方法是正则表达式和修剪:

$str = preg_replace('/[^a-zA-z0-9]+/', '_', $str); $str = trim($str, '_');

编辑2(也许我会真正阅读您的问题并了解您想要什么) 没关系,jnpcl 的答案非常有效。这只是一个正则表达式!

© www.soinside.com 2019 - 2024. All rights reserved.