search

Home  >  Q&A  >  body text

I have a question about php regular expressions. . .

There are some special needs. An expression is needed to extract N field data in html
For example

<p class="test">
    <p class="title">xxx</p>
    <p class="xas"></p><pclass="asd"></p>
    <p class="pic">xxx</p>
</p>
<p class="test">
    <p class="title">xxx</p>
    <p class="xas"></p><pclass="asd"></p>
    <p class="pic">xxx</p>
</p>

We need to extract the title and pic data from HTML. How to write the regular expression?
The <p class="xas"></p><pclass="asd"></p> in the middle is different content, but this content is useless and there is no need to crawl it
I'm just getting started. Please give me some advice. Thank you

迷茫迷茫2814 days ago482

reply all(4)I'll reply

  • PHP中文网

    PHP中文网2017-05-16 13:11:53

    You don’t have to use regular expressions, there is something called phpquery

    reply
    0
  • 我想大声告诉你

    我想大声告诉你2017-05-16 13:11:53

    let str = `
        <p class="test">
            <p class="title">xxx</p>
            <p class="xas"></p><pclass="asd"></p>
            <p class="pic">xxx</p>
        </p>
        <p class="test">
            <p class="title">xxx</p>
            <p class="xas"></p><pclass="asd"></p>
            <p class="pic">xxx</p>
        </p>
    `
    
    let results = str.match(/(title|pic)">.*?</g).map(e=>e.replace('">', ':')).map(e=>e.replace('<', ''))

    The result is:

    // results:
    [ 'title:xxx', 'pic:xxx', 'title:xxx', 'pic:xxx' ]

    Supplement:
    I didn’t see clearly that the question mentioned PHP. I don’t know much about PHP. It’s written in js. You can just take the regular part.

    reply
    0
  • 天蓬老师

    天蓬老师2017-05-16 13:11:53

    Just upload the code

    $re = '/(title|pic).*?>([^<]+)/';
    $str = '<p class="test">
        <p class="title">xxx</p>
        <p class="xas"></p><pclass="asd"></p>
        <p class="pic">xxx</p>
    </p>
    <p class="test">
        <p class="title">xxx</p>
        <p class="xas"></p><pclass="asd"></p>
        <p class="pic">xxx</p>
    </p>';
    
    preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);
    
    //演示输出的结果,你可以根据你的需求,从$matches中拿到你想要的xxx部分。
    var_dump($matches);

    reply
    0
  • 淡淡烟草味

    淡淡烟草味2017-05-16 13:11:53

    This kind of performance is very poor -.-. It is still reliable to use js to obtain it at the front desk.

    reply
    0
  • Cancelreply