Piemēram, šāda regulārā izteiksme: /^[^abc]/
. Tā atbilst jebkurai atsevišķai rakstzīmei virknes sākumā, izņemot a, b vai c.
Ja pēc tās pievienosiet *
- /^[^abc]*/
- regulārā izteiksme turpinās pievienot rezultātu ar katru nākamo rakstzīmi, līdz tā saskarsies ar a
, vai b
, vai c
.
Piemēram, izejas virknei "qwerty qwerty whatever abc hello"
, izteiksme atbilst līdz "qwerty qwerty wh"
.
Bet ko darīt, ja es gribētu, lai atbilstošā virkne būtu "qwerty qwerty qwerty whatever "
.
...Citiem vārdiem sakot, kā es varu saskaņot visu līdz (bet ne ieskaitot) precīzu virkni "abc"
?
Ja jūs meklējat, lai notvertu visu līdz pat "abc":
/^(.*?)abc/
Paskaidrojums:
( )
ievāc frāzi iekavās, lai piekļūtu, izmantojot $1
, $2
utt.
^
atbilst rindas sākumam
.*
sakrīt ar jebko, ?
nesakrīt (sakrīt ar minimālo nepieciešamo rakstzīmju skaitu) - [1]
[1] Tas ir nepieciešams tāpēc, ka pretējā gadījumā šādā virknē:
whatever whatever something abc something abc
pēc noklusējuma regekss ir žēlsirdīgs, tas nozīmē, ka tas atbilst, cik vien iespējams. Tāpēc /^.*abc/
atbilstu "kaut kas kaut kas kaut kas abc kaut kas ". Ja pievienosim nepateicīgo kvantifikatoru ?
, regekss atbilst tikai "jebkam jebkam kaut kam kaut kam ".
Manuprāt, jums ir nepieciešamas apakšizteiksmes. Ja es pareizi atceros, apakšizteiksmēm var izmantot parastās ()
iekavas.
Šī daļa ir no grep rokasgrāmatas:
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.
Veiciet kaut ko līdzīgu ^[^[^(abc)]
vajadzētu izdarīt šo triku.
Ar $
apzīmē virknes beigas, tāpēc šāds raksturs varētu darboties: [[^abc]*]$
, kur jūs meklējat jebko, kas nebeidzas nevienā abc
iterācijā, bet tam jābūt beigās.
Turklāt, ja izmantojat skriptu valodu ar regex (piemēram, php vai js), tām ir meklēšanas funkcija, kas apstājas, kad pirmo reizi sastopas ar paraugu (un jūs varat norādīt sākumu no kreisās vai no labās puses, vai php gadījumā varat veikt implode, lai atspoguļotu virkni).