Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.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_Preg Replace_Multilingual - Fatal编程技术网

Php 替换所有非数字符号的正则表达式

Php 替换所有非数字符号的正则表达式,php,regex,preg-replace,multilingual,Php,Regex,Preg Replace,Multilingual,我不明白这件事,我认为只有一种模式是可能的,请帮助我改进 我有这个字符串2/3项,我不会只收到2/3项 项目也可以用cirillic so2/3цццццimk_ц 所以我认为最好的方法是使用\D所有非数字(结果23) 但这也删除了我想保留的斜杠,我怎么办 //这是我目前的解决方案, //但它不完整,因为我有一个错误 //它返回:2/3� //也许是编码的问题? 预替换(“@[a-zA-Zа-ЯА-Я]*”、“'2/3ааЯааЯ'”); //所以我选择了这样做,但不知道如何保持 预替换('@[

我不明白这件事,我认为只有一种模式是可能的,请帮助我改进

我有这个字符串
2/3项
,我不会只收到
2/3项

项目也可以用cirillic so
2/3цццццimk_ц

所以我认为最好的方法是使用
\D
所有非数字(结果
23

但这也删除了我想保留的斜杠,我怎么办

//这是我目前的解决方案,
//但它不完整,因为我有一个错误
//它返回:2/3�
//也许是编码的问题?
预替换(“@[a-zA-Zа-ЯА-Я]*”、“'2/3ааЯааЯ'”);
//所以我选择了这样做,但不知道如何保持
预替换('@[\D]*@',''2/3ццццццц');
//返回时间:23
#如何获得2/3?
您可以使用

if(预匹配('~\d+\s*/\s*\d+~u',$text,$match)){
echo$match[0];
}
此外,如果分数部分是可选的,则使用

preg\u匹配('~\d+(?:\s*/\s*\d+)?~u',$text,$match)
如果需要提取所有匹配项,请使用
preg\u match\u all

preg\u match\u all('~\d+(?:\s*/\s*\d+)?~u',$text,$matches)
请参阅和。请注意,
preg\u match
提取匹配项,而不是将其删除(与
preg\u replace
的情况相同)

图案细节

  • \d+
    -一个或多个数字 -
    \s*/\s*
    -
    /
    包含零个或多个空格
  • \d+
    -一个或多个数字

请注意,
u
用于防止字符串中的空格可能不是常规的ASCII空格,如
\xA0

您可以排除斜杠
[^\d/]+
@Thefourthbird很好,它可以工作!但正确的方法是这样的
[^\d\/]+
,对于空格
[^\d\s\/]+
,您使用
@
作为分隔符,所以您不必逃避正斜杠。@非常感谢您,我不知道这一点,提取所需内容比替换更安全。