Regular Expressions
När du INTE ska använda Regular Expressions
Sök…
Anmärkningar
Eftersom regelbundna uttryck är begränsade till antingen en vanlig grammatik eller en kontextfri grammatik, finns det många vanliga missbruk av regelbundna uttryck. Så i det här ämnet finns det några exempel på när du INTE ska använda vanliga uttryck, utan istället använda ditt favoritspråk.
Vissa människor tänker när de ställs inför ett problem:
"Jag vet, jag kommer att använda vanliga uttryck."
Nu har de två problem.
- Jamie Zawinski
Matchande par (som parentes, parentes ...)
Vissa regex-motorer (som .NET) kan hantera sammanhangsfria uttryck och kommer att lösa det. Men det är inte fallet för de flesta standardmotorer. Och även om de gör det kommer du i slutändan att ha ett komplext svårläst uttryck, medan användning av ett parsing-bibliotek kan göra jobbet enklare.
Enkla strängoperationer
Eftersom regelbundna uttryck kan göra mycket är det frestande att använda dem för de enklaste operationerna. Men att använda en regex-motor har en kostnad för minnes- och processoranvändning: du måste kompilera uttrycket, lagra automaten i minnet, initiera den och sedan mata den med strängen för att köra den.
Och det finns många fall där det bara inte är nödvändigt att använda det! Oavsett vilket språk du väljer är det alltid de grundläggande stränghanteringsverktygen. Så som regel, när det finns ett verktyg för att göra en åtgärd i ditt vanliga bibliotek, använd det verktyget, inte en regex:
- dela en sträng?
Till exempel fungerar följande utdrag i Python, Ruby och Javascript:
'foo.bar'.split('.')
Vilket är lättare att läsa och förstå, liksom mycket mer effektivt än (på något sätt) motsvarande reguljära uttryck:
(\w+)\.(\w+)
- Remsa efter utrymmen?
Detsamma gäller för efterföljande utrymmen!
'foobar '.strip() # python or ruby
'foobar '.trim() // javascript
Vilket skulle motsvara följande uttryck:
([^\n]*)\s*$ # keeping \1 in the substitution
Analysera HTML (eller XML, eller JSON eller C-kod eller ...)
Om du vill extrahera något från en webbsida (eller vilken som helst representations- / programmeringsspråk) är en regex fel verktyg för uppgiften. Du bör istället använda ditt språkbibliotek för att uppnå uppgiften.
Om du vill läsa HTML eller XML eller JSON använder du bara biblioteket som analyserar det ordentligt och fungerar som användbara objekt på ditt favoritspråk! Du kommer att hamna med läsbar och mer underhållbar kod och du kommer inte att hamna
- RegEx matchar öppna taggar utom XHTML-fristående taggar
- Python analysera HTML med hjälp av vanliga uttryck
- finns det ett regex för att generera alla heltal för ett visst programmeringsspråk