Thomas Mell: Suche RegExp

Hi Leute,
ich schraube jetzt schon 2 Stunden rum und bekomme einen simplen RegExp nicht auf die Reihe.
Es geht um die Erkennung von XML-Attributen die durch kein White Space getrennt sind.
Beispiele:
<tag a="b"c="d">
<tag a='b'c="d">
<tag a="b "c=" d">
<tag a="b"c='d '>
usw...
<tag a="b"> sollte natürlich keinen Treffer liefern, ebensowenig wie <tag>, </tag>, <tag/> oder <tag />
Zwischen dem Attribut a und c fehlt ein (oder mehrere) White Space(s).
Bekommt das jemand hin?

Grüße
Thomas Mell

  1. Hallo Thomas,

    Hilft Dir das weiter:
    (<\w+) ((\w+)= ?['"] ?\w+ ?['"]){2,}(>)

    Gruß,

    Dieter

    1. Hi Dieter
      das {2,} war es, darauf bin ich nicht gekommen - vielen Dank.
      Für die Nachwelt hinterlasse ich hier mal die RegExp welche sich an die W3C-Spezifikationen hält (für ein-Byte Kodierungen):

      $reg_S        = '[\x20\x09\x0D\x0A]';
      $reg_Letter   = '[A-Za-z\xC0-\xD6\xD8-\xF6\xF8-\xFF]';
      $reg_NameChar = "{$reg_Letter}|[0-9]|[.-_:\xB7]";
      $reg_Name     = "(?:{$reg_Letter}|_|:)(?:{$reg_NameChar})*";

      preg_match("§<{$reg_Name}{$reg_S}+(?:{$reg_Name}{$reg_S}*={$reg_S}*(['"])[^\1]*?\1){2,}[^>]*?>§", $value);

      Der RegExp wurde mit folgenden Definitionen erfolgreich getestet:
      <tag a="b"c="d">
      <tag a='b'c="d">
      <tag a="b "c=" d">
      <tag a="b"c='d '>
      <tag a=""c=''>
      <tag a="b"c='d '/>
      <tag a=""b=""c=""/>
      <tag a="" b=""c=""/>
      <tag a=""b="" c=""/>
      <tag a="x"b=""c=""/>
      <tag a="" b="y"c=""/>
      <tag a="b"><tag a=""b="" c="z"/></tag>
      <tag a="b" c="d">
      <tag a="b"/>
      <tag>
      </tag>
      <tag/>
      <tag />

      1. Hallo Thomas,

        Ich mach meine Regexp meist so, dass ich The Regex Coach benutze und mir die Bedingungen verbal vorstelle, also etwa
        ein <                                         (<
        gefolgt von einem Buchstaben oder einer Zahl  \w
        die einmal oder mehrfach vorkommen            +)
        gefolgt von einem Leerzeichen usw.
        Vielleicht hilft Dir das auch in der Zukunft weiter.

        Gruß,

        Dieter