Ta dette regulære uttrykket: /^[^abc]/
. Dette vil matche ethvert enkelt tegn i begynnelsen av en streng, unntatt a, b eller c.
Hvis du legger til en *
etter det - /^[^abc]*/
- vil det regulære uttrykket fortsette å legge til hvert påfølgende tegn i resultatet, helt til det treffer enten en a
, eller b
, eller c
.
For eksempel, med kildestrengen "qwerty qwerty whatever abc hello"
, vil uttrykket matche opp til "qwerty qwerty wh"
.
Men hva om jeg vil at den matchende strengen skal være "qwerty qwerty hva som helst ""
.
...Med andre ord, hvordan kan jeg matche alt opp til (men ikke inkludert) den nøyaktige sekvensen ""abc""
?
Hvis du ønsker å fange alt opp til "abc":
/^(.*?)abc/
Forklaring:
( )
fanger opp uttrykket innenfor parentesene for tilgang ved hjelp av $1
, $2
osv.
^
samsvarer med begynnelsen av linjen
.*
samsvarer med hva som helst, ?
ikke-grådig (samsvarer med det minste antall tegn som kreves) - [1]
[1] Grunnen til at dette er nødvendig er at ellers, i den følgende strengen:
whatever whatever something abc something abc
som standard er regexer grådige, noe som betyr at de vil matche så mye som mulig. Derfor vil /^.*abc/
matche "hva som helst noe abc noe ". Hvis du legger til den ikke-grådige kvantifisereren ?
, samsvarer regex bare med "uansett hva som helst noe ".
Jeg tror du trenger underuttrykk. Hvis jeg husker riktig kan du bruke de vanlige ()
parentesene for underuttrykk.
Denne delen er fra grep-manualen:
Back References and Subexpressions
The back-reference \n, where n is a single digit, matches the substring
previously matched by the nth parenthesized subexpression of the
regular expression.
Gjør noe sånt som ^[^(abc)]
burde gjøre susen.
$
markerer slutten av en streng, så noe som dette bør fungere: [[^abc]*]$
der du leter etter noe som IKKE slutter på noen iterasjon av abc
, men det må være på slutten.
Også hvis du bruker et skriptspråk med regex (som php eller js), har de en søkefunksjon som stopper når den først møter et mønster (og du kan spesifisere start fra venstre eller start fra høyre, eller med php kan du gjøre en implodere for å speile strengen).