Thomas: Regex Anfängerfrage

Hallo, wie finde ich etwas mit regex innerhalb einer Fundstelle.

<link>http://unwichtigerlink</link>

<title>1. Titel</title>
<link>http://xxx.de/1</link>
<comments>http://xxx.de/#comments</comments>
<pubDate>Tue, 25 Jun 2007 02:06:48</pubDate>

<link>http://unwichtigerlink</link>
<link>http://unwichtigerlink</link>

<title>2. Titel</title>

<link>http://xxx.de/2</link>
<comments>http://xxx.de/#comments</comments>
<pubDate>Tue, 25 Jun 2007 02:08:48</pubDate>

<link>http://unwichtigerlink</link>

$pattern = '#<title()*>(.*)#imsU';
Das zeigt mir ja schön schön die title, aber wenn ich nun auch noch
die links haben will, und zwar genau die auf </title> folgen, dann weiss ich nicht weiter.

Tommy

  1. Lieber Thomas,

    $pattern = '#<title()*>(.*)#imsU';
    Das zeigt mir ja schön schön die title, aber wenn ich nun auch noch
    die links haben will, und zwar genau die auf </title> folgen, dann weiss ich nicht weiter.

    dazu brauchst Du ein zweites Pattern in einer neuen Funktion. Das kannst Du nicht in einer einzigen RegEx abhandeln.

    $alle_titel = '~(?is)<title[^>]*>([^<]+)~';  
    $alle_links_nach_titeln = '~(?is)</title>[^<]*<link[^>]*>([^<]+)~';
    

    Liebe Grüße aus Ellwangen,

    Felix Riesterer.

    --
    ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)
    1. gudn tach!

      dazu brauchst Du ein zweites Pattern in einer neuen Funktion. Das kannst Du nicht in einer einzigen RegEx abhandeln.

      noe, das geht auch in einer.

      prost
      seth

  2. gudn tach!

    oops, da hab ich versehentlich wohl mal wieder die vorschau nicht bestaetigt. also noch mal...

    <link>http://unwichtigerlink</link>

    <title>1. Titel</title>
    <link>http://xxx.de/1</link>
    <comments>http://xxx.de/#comments</comments>
    <pubDate>Tue, 25 Jun 2007 02:06:48</pubDate>

    <link>http://unwichtigerlink</link>
    <link>http://unwichtigerlink</link>

    <title>2. Titel</title>

    <link>http://xxx.de/2</link>
    <comments>http://xxx.de/#comments</comments>

    $pattern = '#<title()*>(.*)#imsU';
    Das zeigt mir ja schön schön die title,

    nein, zumindest nicht unter der verwendung von preg_match_all, denn damit wuerdest du nur die tags "<title>" und ein paar leere strings bekommen.

    besser:
      #<title>(.*?)<#is
    oder
      #(?<=<title>).*?(?=</title>)#is

    aber wenn ich nun auch noch
    die links haben will, und zwar genau die auf </title> folgen, dann weiss ich nicht weiter.

    #<title>(.*?)</title>(?:\s*<link>(.*?)</link>)?#is

    falls nur der erste darauffolgende link wichtig ist. und

    #<title>(.*?)</title>(?:\s*<link>(.*?)</link>)*#is

    falls auch mehrere hintereinander gematcht werden sollen.

    prost
    seth

    1. Hallo Seth,

      #<title>(.*?)</title>(?:\s*<link>(.*?)</link>)*#is

      falls auch mehrere hintereinander gematcht werden sollen.

      Das funktioniert leider nicht aber das andere dafür wunderbar.

      Danke
      Tommy