使用php preg_replace从utf-8编码字符串中删除一些标点

使用php preg_replace从utf-8编码字符串中删除一些标点,php,regex,utf-8,preg-replace,Php,Regex,Utf 8,Preg Replace,我需要从字符串中删除除括号以外的标点符号。我提出了以下建议: $clean = preg_replace ( "/[^\.\,\-\_\'\"\@\?\!\:\$ a-zA-Z0-9()]/", "", $maybedirty ); 这似乎还可以,直到我意识到我需要让一些utf-8编码字符通过(东欧)。尽管我找到了一些可能的解决方案,但到目前为止,我未能使它们发挥作用(或理解它们,或两者兼而有之)。所以问题是如何修改正则表达式以允许utf-8编码字符 $clean = preg_replace

我需要从字符串中删除除括号以外的标点符号。我提出了以下建议:

$clean = preg_replace ( "/[^\.\,\-\_\'\"\@\?\!\:\$ a-zA-Z0-9()]/", "", $maybedirty );
这似乎还可以,直到我意识到我需要让一些utf-8编码字符通过(东欧)。尽管我找到了一些可能的解决方案,但到目前为止,我未能使它们发挥作用(或理解它们,或两者兼而有之)。所以问题是如何修改正则表达式以允许utf-8编码字符

$clean = preg_replace('/[^\w\s()]/', '', $maybedirty);

正则表达式解释:

[^\w\s()]

Match any single character NOT present in the list below «[^\w\s()]»
   A “word character” (Unicode; any letter or ideograph, any number, underscore) «\w»
   A “whitespace character” (any Unicode separator, tab, line feed, carriage return, vertical tab, form feed, next line) «\s»
   A single character from the list “()” «()»

佩德罗·洛比托的建议在第一次尝试时并不奏效。但随附的解释给了我足够多的指示,让我找到了/u(用于UTF-8字符。因此最终的解决方案是:
$clean=preg\u replace('/[^\w\s()]/u',''.$maybedirty)
这很有效,但它仍然通过下划线,应该删除下划线。我很高兴它对您有效!