dsw8292301 2013-03-05 10:24
浏览 73
已采纳

正则表达式 - 如何一次匹配一个模式

I've this function that parses some content to retrieve homemade link tag and convert it to normal link tag.

Possible input:

<p>blabalblahhh <moolinkx pageid="121">text to click</moolinkx> blablabah</p>

Output :

<p>blabalblahhh <a href="whateverpage.htm">text to click</a> blablabah</p>

Here is my code:

$regex = '/\<moolinkx pageid="(.{1,})"\>(.{1,})\<\/moolinkx\>/';
preg_match_all( $regex, $string, $matches );

It works perfectly well if there is only one in the string. But as soon as there is a second one, it doesn't work.

Input:

<p>blabalblahhh <moolinkx pageid="121">text to click</moolinkx>  blablabah.</p>
<p>Another <moolinkx pageid="128">text to clickclick</moolinkx> again blablablah.</p>

That's what I got when I print_r($matches):

Array
(
[0] => Array
    (
        [0] => <moolinkx pageid="121">text to click</moolinkx>  blablabah.</p><p>Another <moolinkx pageid="128">text to clickclick</moolinkx>
    )

[1] => Array
    (
        [0] => 121">text to click</moolinkx>  blablabah.</p><p>Another <moolinkx pageid="128
    )

[2] => Array
    (
        [0] => text to clickclick
    )

)

I'm not at ease with regex, so it must be something very trivial... but I can't pinpoint what it is :(

Thank you very much in advance!

NB: This is my first post here, though I've been using this terrific Q&A for ages!

  • 写回答

2条回答 默认 最新

  • douli0531 2013-03-05 10:55
    关注

    Use a negative Regex:
    $regex = '/<moolinkx pageid="([^"]+)">([^<]+)<\/moolinkx>/';

    Explained demo here: http://regex101.com/r/sI3wK5

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

报告相同问题?

悬赏问题

  • ¥15 高价求中通快递查询接口
  • ¥15 解决一个加好友限制问题 或者有好的方案
  • ¥15 关于#java#的问题,请各位专家解答!
  • ¥15 急matlab编程仿真二阶震荡系统
  • ¥20 TEC-9的数据通路实验
  • ¥15 ue5 .3之前好好的现在只要是激活关卡就会崩溃
  • ¥50 MATLAB实现圆柱体容器内球形颗粒堆积
  • ¥15 python如何将动态的多个子列表,拼接后进行集合的交集
  • ¥20 vitis-ai量化基于pytorch框架下的yolov5模型
  • ¥15 如何实现H5在QQ平台上的二次分享卡片效果?