Reg exp想要用下划线替换所有非字母数字字符

时间:2009-11-12 20:23:27

标签: php regex

我想要一个reg exp用于生成SEO友好的URL,所以像:

My product name

变为

My_product_name

This is a long,long,long!!sentence

变为

This_is_a_long_long_long_sentence

基本上所有非字母数字字符都被删除并替换为下划线。

有什么想法吗?

3 个答案:

答案 0 :(得分:21)

preg_replace('/[^a-zA-Z0-9]+/', '_', $sentence)

基本上,它会查找任何非字母数字字符序列,并将其替换为单个“_”。这样,您还可以避免输出中连续两个_。

如果是URL,您可能还希望它们仅为小写:

preg_replace('/[^a-z0-9]+/', '_', strtolower($sentence))

答案 1 :(得分:5)

 $a = preg_replace("/[^A-Za-z0-9]+/", "_", $str);

或/ \ W + /如果你想保留当前语言环境中被认为是“字母”的所有内容

更换后,也可能需要设置前导和尾随下划线

 $a = trim($a, '_');

答案 2 :(得分:0)

$str = preg_replace("`[^a-z\d]+`i", "_", $str);