我认为PHP将我的输入视为八进制,让它停止?
发布时间:2020-12-13 21:50:19 所属栏目:PHP教程 来源:网络整理
导读:参见英文答案 Understanding str_pad() with leading zeros????????????????????????????????????1个 这可能是一个简单的,但我搜索后无法弄明白.我设法改变输出20种不同的方式,但它们都不是我想要的= D ?php$text = DATAShow.Name.2x05.HDTV.x264Show.Name.2
参见英文答案 >
Understanding str_pad() with leading zeros????????????????????????????????????1个
这可能是一个简单的,但我搜索后无法弄明白.我设法改变输出20种不同的方式,但它们都不是我想要的= D <?php $text = <<<DATA Show.Name.2x05.HDTV.x264 Show.Name.2x06.HDTV.x264 Show.Name.2x07.HDTV.x264 Show.Name.2x08.HDTV.x264 Show.Name.2x09.HDTV.x264 DATA; $text = preg_replace('/([0-9]{1,2})x([0-9]{2})/e','sprintf("S%02dE%02d",$1,$2)',$text); echo $text; ?> 产量 Show.Name.S02E05.HDTV.x264 Show.Name.S02E06.HDTV.x264 Show.Name.S02E07.HDTV.x264 Show.Name.S02E00.HDTV.x264 Show.Name.S02E00.HDTV.x264 你可以看到它将我的08和09变为00,我最好的猜测是这与PHP的思考有关我正在试图指出八进制,因为它是一个基本的8系统,它只喜欢0-7.我不认为“字符串”中的前导零会表明这一点吗?如何更改我的代码以接受08和09但不能将它们更改为00?我尝试了几种尝试逃避它的方法,但我被卡住了. 解决方法
目前你正在做的是:使用八进制的sprintf(“S?dE?d”,2,05).您获得八进制结果是因为在解析它们之前需要将前导零作为字符串处理,而不是直接执行它们.因此,您所寻求的简单解决方案只是引用它们如下:
$text = preg_replace('/([0-9]{1,"$1","$2")',$text); 或者,由于e标志已折旧,请尝试使用更容易使用的preg_replace_callback: $text = preg_replace_callback('/([0-9]{1,2})[x]([0-9]{2})/',function($matches){return sprintf("S%02dE%02d",$matches[1],$matches[2]);},$text); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |