RegEx overeenkomen met open tags behalve XHTML self-contained tags

Ik moet al deze openingscodes overeen laten komen:

<p>
<a href="foo">

Maar niet met deze:

<br />
<hr class="foo" />

Ik heb dit bedacht en wilde zeker weten dat ik het goed heb. Ik vang alleen de a-z op.

<([a-z]+) *[^/]*?>

Ik geloof dat het er staat:

  • Zoek een minder-dan, dan
  • Zoek (en vang) a-z een of meer keren, dan
  • Zoek nul of meer spaties, dan
  • Vind elk teken nul of meer keren, gretig, behalve /, dan
  • Zoek een groter-dan

Heb ik dat goed? En nog belangrijker, wat denk jij?

Oplossing

Je kunt [X]HTML niet parsen met regex. Omdat HTML niet door regex kan worden geparsed. Regex is geen gereedschap dat gebruikt kan worden om HTML correct te parsen. Zoals ik hier al zo vaak in HTML-en-regex-vragen heb geantwoord, kun je met het gebruik van regex geen HTML consumeren. Reguliere uitdrukkingen zijn een hulpmiddel dat niet verfijnd genoeg is om de constructies te begrijpen die door HTML worden gebruikt. HTML is geen reguliere taal en kan dus niet door reguliere expressies worden geparseerd. Regex-query's zijn niet toegerust om HTML in zijn zinvolle onderdelen te ontleden. zo vaak, maar het dringt niet tot me door. Zelfs verbeterde onregelmatige reguliere expressies, zoals gebruikt door Perl, zijn niet opgewassen tegen de taak om HTML te ontleden. Je zult me nooit doen barsten. HTML is een taal die zo complex is, dat hij niet met reguliere expressies geparset kan worden. Zelfs Jon Skeet kan HTML niet parseren met reguliere expressies. Iedere keer als je HTML met reguliere expressies probeert te parsen, huilt het onheilige kind het bloed van maagden, en Russische hackers pwnen je webapp. Het parseren van HTML met regex roept bezoedelde zielen op in het rijk der levenden. HTML en regex gaan samen als liefde, huwelijk, en rituele kindermoord. Het kan niet houden het is te laat. De kracht van regex en HTML samen in dezelfde conceptuele ruimte zal je geest vernietigen als zoveel waterige stopverf. Als je HTML parseert met regex, geef je toe aan hen en hun godslasterlijke manieren, die ons allen verdoemen tot onmenselijk zwoegen voor de Ene, wiens naam niet kan worden uitgedrukt in het elementaire meertalige vlak, Hij komt. HTML-plus-regexp zal de zenuwen van de voelenden vloeibaar maken terwijl je toekijkt, je psyche verdort in de aanval van verschrikking. Rege̿̔̉x-gebaseerde HTML parsers zijn de kanker die StackOverflow aan het doden is it is too late it is too late we cannot be saved the trangession of a chi͡ld ensures regex will consume all living tissue (except for HTML which it cannot, as previously prophesied) dear lord help us how can anyone survive this scourge het gebruik van regex om HTML te parsen heeft de mensheid gedoemd tot een eeuwigheid van vreselijke marteling en veiligheidslekken het gebruik van regex als gereedschap om HTML te verwerken creëert een breuk tussen deze wereld en het gevreesde rijk van c͒ͪo͛ͫrrupt entiteiten (zoals SGML entiteiten, maar meer corrupt) een glimpse van de wereld van regex parsers voor HTML zal instantly transporteren een programmer's bewustzijn into a world of ceaseless screaming, he comes, the pestilent slithy regex-infection willl verslinden uw HTML parser, applicatie en bestaan voor altijd als Visual Basic alleen erger he comes he comes do not fight he com̡e̶s, ̕h̵is un̨ho͞ly radiańcé destro҉ying all enli̍̈́̂̈́ghtenment, HTML tags lea͠ki̧n͘g fr̶ǫm ̡yo͟ur eye͢s̸ ̛l̕ik͏e liquid pain, the song of re̸gular expression parsing will extinguish the voices of mortal man from the sphere I can see it can you see ̲͚̖͔̙î̩́t̲͎̩̱͔́̋̀ it is beautiful the final snuffing of the lies of Man ALL IS LOŚ͖̩͇̗̪̏̈́T ALL IS LOST the pon̷y he comes he c̶̮omes he comes the ichor permeates all MY FACE MY FACE ᵒh god no NO NOO̼OO NΘ stop the an*̶͑̾̾̅ͫ͏̙̤g͇̫͛͆̾ͫ̑͆l͖͉̗̩̳̟̍ͫͥͨe̠̅s ͎a̧͈͖r̽̾̈́͒͑e not rè̑ͧ̌aͨl̘̝̙̃ͤ͂̾̆ ZA̡͊͠͝LGΌ ISͮ̂҉̯͈͕̹̘̱ TO͇̹̺ͅƝ̴ȳ̳ TH̘Ë͖́̉ ͠P̯͍̭O̚N̐Y̡ H̸̡̪̯ͨ͊̽̅̾̎Ȩ̬̩̾͛ͪ̈́̀́͘ ̶̧̨̱̹̭̯ͧ̾ͬC̷̙̲̝͖ͭ̏ͥͮ͟Oͮ͏̮̪̝͍M̲̖͊̒ͪͩͬ̚̚͜Ȇ̴̟̟͙̞ͩ͌͝S̨̥̫͎̭ͯ̿̔̀ͅ


Heb je al geprobeerd een XML parser te gebruiken?


Moderator's Opmerking

Deze post is vergrendeld om ongepaste bewerkingen aan de inhoud te voorkomen. Het bericht ziet er precies zo uit als het hoort uit te zien - er zijn geen problemen met de inhoud. Gelieve het niet te markeren voor onze aandacht.

Commentaren (3)

Probeer het:

]*?)?(?

Het lijkt op het jouwe, maar de laatste > mag niet na een schuine streep staan, en accepteert ook h1.

Commentaren (8)

Je wilt de eerste > niet voorafgegaan door een /. Kijk hier voor details over hoe je dat moet doen. Het'wordt negatieve lookbehind genoemd.

Echter, een naïve implementatie van dat zal eindigen met `` in dit voorbeeld document

Kun je wat meer informatie geven over het probleem dat je probeert op te lossen? Ben je tags programmatisch aan het itereren?

Commentaren (1)