Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 仅带数字、字母和重音符号的正则表达式_Php_Regex_Replace_Diacritics - Fatal编程技术网

Php 仅带数字、字母和重音符号的正则表达式

Php 仅带数字、字母和重音符号的正则表达式,php,regex,replace,diacritics,Php,Regex,Replace,Diacritics,我需要使用PHP过滤字符串以仅返回“数字、字母和带重音的字母” 我试过很多不同的正则表达式,但都不行 我得到的最接近的结果是: $string = 'Você está bem? 123 # ! @ ...'; echo preg_replace('/[^\w\s+$]/', '_', $string); // Return: Voc__ est__ bem_ 123 _ _ _ ___ // But I need to return: Você_está_bem_123 _ _ _ ___

我需要使用PHP过滤字符串以仅返回“数字、字母和带重音的字母”

我试过很多不同的正则表达式,但都不行

我得到的最接近的结果是:

$string = 'Você está bem? 123 # ! @ ...';
echo preg_replace('/[^\w\s+$]/', '_', $string);

// Return: Voc__ est__ bem_ 123 _ _ _ ___
// But I need to return: Você_está_bem_123 _ _ _ ___

有人能帮我吗?我花了几个小时试图解决它,甚至在这里寻找其他问题。

添加一个
/u
修饰符:

$string = 'Você está bem? 123 # ! @ ...';
echo preg_replace('/[^\w\s+$]/u', '_', $string);
                              ^

有关SO正则表达式文档中的
/u
修饰符的更多信息:

模式和主题字符串被视为UTF-8。


添加一个
/u
修改器:

$string = 'Você está bem? 123 # ! @ ...';
echo preg_replace('/[^\w\s+$]/u', '_', $string);
                              ^

有关SO正则表达式文档中的
/u
修饰符的更多信息:

模式和主题字符串被视为UTF-8。


仅供参考:如果您的输入也包含变音符号作为单独的符号(您需要将
\p{M}
添加到字符类:
/[^\w\p{M}\s+$]/u
作为
/\w/u
仅匹配
[\p{L}\p{N}\u]
这是工作,谢谢!但是,我需要使用“utf8 u解码”因此不起作用:在将其传递给
utf8\u decode
之前,您应该在Unicode字符串上运行正则表达式。我发现不需要“utf8\u decode()”,然后将其删除。缺少的是“charset=utf-8”。谢谢!仅供参考:如果您的输入还包含作为单独符号的变音符号(您需要添加
\p{M})
到字符类:
/[^\w\p{M}\s+$]/u
作为
/\w/u
只匹配
[\p{L}\p{N}\u]
这是有效的,谢谢!但是,我需要使用“utf8\u decode”而不是有效的:在将正则表达式传递给
utf8\u decode>之前,应该在Unicode字符串上运行正则表达式。我发现不需要“utf8\u decode”),然后将其删除。缺少的是一个“charset=utf-8”。谢谢!