Regex, match onvolledige html tags

    This site uses cookies. By continuing to browse this site, you are agreeing to our Cookie Policy.

    • Regex, match onvolledige html tags

      Hallo iedereen,

      Ik ben momenteel wat aan het programmeren en ik heb deze situatie voor:
      Ik heb een blok html die wordt afgekort door de substr() functie.
      Het betreft hier het begin van een artikel met erna een "lees meer" knop.

      Nu kan dat artikel natuurlijk html codes bevatten, e.g. de strong-tag. Hier kan de substr() functie aardig de html verpesten.
      Ik heb al een functie die alle geopende tags ook weer sluit.
      Maar nu zit ik nog met het volgende scenario, de substr() functie kan halve tags verwijderen.
      Bijvoorbeeld:

      HTML Source Code

      1. <strong>
      2. Hallo allemaal
      3. </strong>
      4. <stro
      En dus wil ik met een regex de tags die niet volledig zijn eruit halen.
      Ik heb momenteel de volgende regex

      Difference-File

      1. /(<.*)(?!>)/

      Maar deze doet het helaas niet... Wie zou mij kunnen helpen? Ik geraak er zelf echt niet uit.
      Hij zou dus moeten matchen met de onvolledige tag in de onderstaande voorbeelden:

      Difference-File

      1. Woordje <e
      2. <a href=
      3. <strong>qsdf</strong> <str
      Het probleem is nu dat hij ook volledige tags matcht. Bv. bij de laatste regel matcht hij de volledige regel aan.

      Alvast bedankt!

      Willem

      The post was edited 1 time, last by wimmpie ().

    • Meestal grijp je pas naar een regexp als alle eenvoudigere oplossingen zijn uitgeput. Vaak bestaan er goedkopere string-functies die precies/ongeveer doen waar je naar zoekt.

      Ik denk dat dit vraagstuk eenvoudig(er) opgelost kan worden door gewoon te kijken waar de laatste voorkomens van > en < zich bevinden met behulp van strrpos().

      Indien de laatste < na de laatste > valt (wellicht zul je nog andere randgevallen moeten controleren) wil dit zeggen dat je een niet-gesloten tag hebt. Je kunt dan de positie van de laatste < pakken.

      Let erop dat strlen() bytes telt, en geen karakters. Het is waarschijnlijk beter om string-bewerkingen met mb-functies te doen. In dat opzicht is het dus ook verstandiger om mb_strrpos() te gebruiken in plaats van strrpos().
    • Een alternatief is bijvoorbeeld dat je een inleidende alinea in een apart veld opslaat, of deze paragraaf een speciale class meegeeft (zodat deze ook dikgedrukt wordt, als een soort samenvatting, dit zie je ook geregeld in kranten). Bij laatstgenoemde methode zou je alles in één veld kunnen opslaan, en die eerste paragraaf uit de tekst kunnen hengelen met een regexp.

      The post was edited 1 time, last by FangorN ().