Zoeken…


Opmerkingen

Omdat reguliere expressies beperkt zijn tot een reguliere grammatica of een contextvrije grammatica, zijn er veel voorkomende misbruiken van reguliere expressies. Dus in dit onderwerp zijn er een paar voorbeelden van wanneer u GEEN reguliere expressies zou moeten gebruiken, maar in plaats daarvan uw favoriete taal moet gebruiken.

Sommige mensen denken, wanneer ze met een probleem worden geconfronteerd:
"Ik weet het, ik zal reguliere expressies gebruiken."
Nu hebben ze twee problemen.

- Jamie Zawinski

Overeenkomende paren (zoals haakjes, haakjes ...)

Sommige regex-engines (zoals .NET) kunnen contextvrije expressies aan en zullen dit oplossen. Maar dat is niet het geval voor de meeste standaardmotoren. En zelfs als ze dat doen, krijgt u een complexe, moeilijk leesbare uitdrukking, terwijl het gebruik van een parsbibliotheek de taak gemakkelijker kan maken.

Eenvoudige stringhandelingen

Omdat reguliere expressies veel kunnen doen, is het verleidelijk om ze te gebruiken voor de eenvoudigste bewerkingen. Maar het gebruik van een regex-engine heeft kosten in geheugen en processorgebruik: u moet de uitdrukking compileren, de automaat in het geheugen opslaan, initialiseren en vervolgens voeden met de tekenreeks om deze uit te voeren.

En er zijn veel gevallen waarin het gewoon niet nodig is om het te gebruiken! Wat uw taal ook is, het heeft altijd de basistool voor het manipuleren van tekenreeksen. Dus in de regel, wanneer er een tool is om een actie in uw standaardbibliotheek uit te voeren, gebruikt u die tool, geen regex:

  • een string splitsen?

Het volgende fragment werkt bijvoorbeeld in Python, Ruby en Javascript:

'foo.bar'.split('.')

Dat is gemakkelijker te lezen en te begrijpen, en veel efficiënter dan de (op de een of andere manier) equivalente reguliere expressie:

(\w+)\.(\w+)
  • Trailing spaties?

Hetzelfde geldt voor volgspaties!

'foobar     '.strip() # python or ruby
'foobar     '.trim() // javascript

Dat zou gelijk zijn aan de volgende uitdrukking:

([^\n]*)\s*$ # keeping \1 in the substitution

HTML parseren (of XML, of JSON, of C-code, of ...)

Als u iets uit een webpagina (of een andere weergave- / programmeertaal) wilt extraheren, is een regex het verkeerde hulpmiddel voor de taak. Gebruik in plaats daarvan de bibliotheken van uw taal om de taak te volbrengen.

Als u HTML, of XML of JSON wilt lezen, gebruik dan gewoon de bibliotheek die het correct parseert en het als bruikbare objecten in uw favoriete taal dient! Je zult eindigen met leesbare en beter te onderhouden code, en je zult niet eindigen



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow