dongtang1910 2011-02-11 12:21
浏览 39
已采纳

正则表达式查找标记(preg_replace_callback)

I need to find all occurrences of a Tag for a WP-Plugin.

<wpg3>10|300|defaultTemplate|eyJhbGlnbiI6ImFsaWdubGVmdCJ9</wpg3>

There are serval possible Versions of the tag (,,, ...) but start and end do match. The Groups are optional: Should mean, that there could be none or one, or two or three "|", which separate the Options.

My problem: if there is only one Tag in my search-string everything will work as expected. But if I add a second tag to my string , the callback is only called once, instead of once per Tag. There must be something missing at the Beginning or in the end. The Regexp just fails using multiple tags if the last Argument (features) is missing.

  $return = preg_replace_callback('/<wpg[23](?P<unused>id)?>(?P<uri_or_id>[^\|]*)[\|]?(?P<width>[^\|]*)[\|]?(?P<template>[^\|]*)[\|]?(?P<features>[^\|]*)<\/wpg[23](?P<unused2>id)?>/i', array( $this, 'wpg3_content' ), $content );

I taking the example above I wanna get:

Array
(
    [0] => 10|300|defaultTemplate|eyJhbGlnbiI6ImFsaWdubGVmdCJ9
    [unused] =>
    [1] => 
    [uri_or_id] => 10
    [2] => 10
    [width] => 300
    [3] => 300
    [template] => defaultTemplate
    [4] => defaultTemplate
    [features] => eyJhbGlnbiI6ImFsaWdubGVmdCJ9
    [5] => eyJhbGlnbiI6ImFsaWdubGVmdCJ9
)
  • 写回答

2条回答 默认 最新

  • download1214 2011-02-11 14:27
    关注

    can you do a preg_match_all on tags first of all

    preg_match_all("/<([^>]*)?>/",$in, $out);
    

    then loop through the $out array, where you should have the tag name and content.

    if the tag matches what you want then

    explode($out[2],"|")
    

    or are you looking to do everything in your regex?

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

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器