douqing5981 2009-07-28 10:44
浏览 34
已采纳

php中类型说明符的正则表达式

I need a regular expression which extract type specifier ( like %d,%s) from a string.

   <?
     $price = 999.88;
     $str = "string";
     $string = "this is a %f sample %'-20s,<br> this string is mixed with type    specifier like   (number:%d's)";        
    //output 1 :echo sprintf($string,$price,$str,500);
    //output 2 should be $string replaced by [#]
   ?>

output 1

this is a 999.880000 sample --------------string,
this string is mixed with type specifier like (number:500's)

i want to replace all these type specifiers with [#]. how do i write an regular expression for that type specifiers.

what i need is

output 2

this is a [#] sample --------------[#],
this string is mixed with type specifier like (number:[#]'s)
  • 写回答

2条回答 默认 最新

  • douxiuyu2028 2009-07-28 11:19
    关注

    Pascal beat me to it, but here is my (equally not very well tested regex).

    '/%(?:(?<swap_position>[0-9]+)\$)?(?<sign>-|\+)?(?<padding>\'.|0|[[:space:]])?(?<alignment>-?)(?<width>[0-9]+)?(?:\.(?<precision>[0-9]+))?(?<type>[%bcdeufFosxX])?/m';
    

    I would be concerned that by converting everything to # you lose the information where someone has swapped the order using 2$, 1$ etc.

    I wanted to make it so that if you captured a custom padding character prefixed by a quote, that quote wouldn't be captured, but I couldn't work it out.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 keil的map文件中Image component sizes各项意思
  • ¥30 BC260Y用MQTT向阿里云发布主题消息一直错误
  • ¥20 求个正点原子stm32f407开发版的贪吃蛇游戏
  • ¥15 划分vlan后,链路不通了?
  • ¥20 求各位懂行的人,注册表能不能看到usb使用得具体信息,干了什么,传输了什么数据
  • ¥15 Vue3 大型图片数据拖动排序
  • ¥15 Centos / PETGEM
  • ¥15 划分vlan后不通了
  • ¥20 用雷电模拟器安装百达屋apk一直闪退
  • ¥15 算能科技20240506咨询(拒绝大模型回答)