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 so2/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\/]+
,您使用@
作为分隔符,所以您不必逃避正斜杠。@非常感谢您,我不知道这一点,提取所需内容比替换更安全。