我想用下划线/&%#$
替换所有非字母和数字字符,例如(_)
等,并将所有'
(单引号)替换为“”空白(所以没有下划线)。
所以“没有任何”(忽略双引号)会变成“ There_wouldnt_be_any ”。
我对reg表达式没用,因此发布了帖子。
干杯
答案 0 :(得分:32)
$newstr = preg_replace('/[^a-zA-Z0-9\']/', '_', "There wouldn't be any");
$newstr = str_replace("'", '', $newstr);
我将它们分成两行,以使代码更清晰。
注意:如果您正在寻找Unicode支持,请参阅下面的Filip的答案。除了A-z
之外,它还将匹配所有注册为字母的字符。
答案 1 :(得分:29)
如果您通过写“非字母和数字”排除超过[A-Za-z0-9]
(即考虑像åäö
这样的字母作为字母)并希望能够准确处理UTF-8字符串\p{L}
和\p{N}
将有所帮助。
\p{N}
将匹配任何“数字”\p{L}
将匹配任何“字母字符”,其中包括
文档PHP: Unicode Character Properties
$data = "Thäre!wouldn't%bé#äny";
$new_data = str_replace ("'", "", $data);
$new_data = preg_replace ('/[^\p{L}\p{N}]/u', '_', $new_data);
var_dump (
$new_data
);
输出
string(23) "Thäre_wouldnt_bé_äny"
答案 2 :(得分:2)