duanpei4455 2017-03-10 17:44
浏览 40

使这个正则表达式使用负前瞻

I’m doing an html and bbcode parser. I have this regex that catches repeated groups from the inside-out:

$re = '/<b>((?:(?!<\/?b>).)*)<\/b>/is';

But I want to be able to match <b class=”string”>text</b> or any other attribute inside. I was already doing it by using:

'/<b((\s)+?.*?)?\>(.*?)<\/b>/is'

But now when trying to join them and add the new negative lookahead, I cannot make it work.

I tried '/<b((\s)+?.*?)?\((?:(?!</?b((\s)+?.*?)?>).)*)<\/b>/is' but does not work properly, for this:

<b class=”string2”><b class=”string”>text</b></b>

It matches from the first b tag, and it shouldn’t. I would like to get:

<b class=”string2”>[b]text[/b]</b>
  • 写回答

1条回答 默认 最新

  • drl6054 2017-03-10 18:16
    关注

    This will all < b > with [b]:

    <?php
    
    $str = '<b>test</b><b class=”string2”><b class=”string”>text</b></b>';
    $prev = '';
    while ($prev != $str) {
        $prev = $str;
        $str = preg_replace("/<b[ a-z0-9\"'\=”]*?>(.*?)<\/b>/is","[b]$1[/b]",$str);
    }
    echo $str;
    
    ?>
    
    评论

报告相同问题?

悬赏问题

  • ¥15 stm32代码移植没反应
  • ¥15 matlab基于pde算法图像修复,为什么只能对示例图像有效
  • ¥100 连续两帧图像高速减法
  • ¥15 组策略中的计算机配置策略无法下发
  • ¥15 如何绘制动力学系统的相图
  • ¥15 对接wps接口实现获取元数据
  • ¥20 给自己本科IT专业毕业的妹m找个实习工作
  • ¥15 用友U8:向一个无法连接的网络尝试了一个套接字操作,如何解决?
  • ¥30 我的代码按理说完成了模型的搭建、训练、验证测试等工作(标签-网络|关键词-变化检测)
  • ¥50 mac mini外接显示器 画质字体模糊