我想删除字符串中的特殊字符,但保留“ñ/Ñ”和“-”。
所以,如果我有
»¿Antonio Ramon-Peñaą
结果将是:
Antonio Ramon-Peña
答案 0 :(得分:0)
您可以使用PCRE动词来允许一组字符列表,如果匹配则忽略它。然后针对所有其他字符(因为它不是您关心的字符)将其删除。
preg_replace('/[\w\h-](*SKIP)(*FAIL)|./u', '', '»¿Antonio Ramon-Peñaą')
有关正则表达式的详细说明,请参见https://regex101.com/r/pCwGuy/1/。基本上[\w\h-]
是任何水平空格,单词字符或连字符。在结束定界符之后的u
修饰符将\w
扩展为包括ascii集合之外的单词字符。 .
是任何单个字符。
或者,您可以匹配所有有效字符,然后重新加入它们。
preg_match('/[\w\h-]+/u', '»¿Antonio Ramon-Peñaą', $match);
echo implode('', $match);