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



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow