Regular Expressions
Woordgrens
Zoeken…
Syntaxis
- POSIX-stijl, einde van het woord:
[[:>:]]
- POSIX-stijl, begin van het woord:
[[:<:]]
- POSIX-stijl, woordgrens:
[[:<:][:>:]]
- SVR4 / GNU, einde van het woord:
\>
- SVR4 / GNU, begin van het woord:
\<
- Perl / GNU, woordgrens:
\b
- Tcl, einde van het woord:
\M
- Tcl, begin van het woord:
\m
- Tcl, woordgrens:
\y
- Portable ERE, begin van het woord:
(^|[^[:alnum:]_])
- Portable ERE, einde van woord:
([^[:alnum:]_]|$)
Opmerkingen
Overeenkomen met het volledige woord
\bfoo\b
komt overeen met het volledige woord zonder alfanumeriek en _
of erna.
Overnemen van regularexpression.info
Er zijn drie verschillende posities die in aanmerking komen als woordgrenzen:
- Voor het eerste teken in de tekenreeks, als het eerste teken een woordteken is.
- Na het laatste teken in de tekenreeks, als het laatste teken een woordteken is.
- Tussen twee tekens in de tekenreeks, waarbij de ene een woordteken is en de andere geen woordteken is.
De term woordkarakter betekent hier een van de volgende dingen
- Alfabet (
[a-zA-Z]
) - Nummer (
[0-9]
) - Underscore
_
Kortom, woordteken = \w
= [a-zA-Z0-9_]
Zoek patronen aan het begin of einde van een woord
Onderzoek de volgende strings:
foobarfoo
bar
foobar
barfoo
- de reguliere expressie
bar
zal overeenkomen met alle vier snaren, -
\bbar\b
komt alleen overeen met de 2e, -
bar\b
kan de 2de en 3de reeks matchen, en -
\bbar
komt overeen met de 2e en 4e snaar.
Woordgrenzen
Het metacharacter \b
Om het gemakkelijker te maken om hele woorden te vinden, kunnen we het metateken gebruiken \b
. Het markeert het begin en het einde van een alfanumerieke reeks *. Omdat het alleen dient om deze locaties te markeren, komt het eigenlijk niet overeen met alleen een personage.
*: Het is gebruikelijk om een alfanumerieke reeks een woord te noemen, omdat we de tekens kunnen vangen met een \w
(de klasse met woordtekens). Dit kan echter misleidend zijn, omdat \w
ook cijfers en, in de meeste smaken, het onderstrepingsteken omvat.
Voorbeelden:
regex | Invoer | Wedstrijden? |
---|---|---|
\bstack\b | stackoverflow | Nee, omdat er geen vookomen van het gehele woord stack |
\bstack\b | foo stack bar | Ja , want er is niets vóór of na de stack |
\bstack\b | stack!overflow | Ja : er is niets vóór stack en ! is geen woordkarakter |
\bstack | stackoverflow | Ja , want er is niets vóór stack |
overflow\b | stackoverflow | Ja , want er is niets na overflow |
Het metacharacter \B
Dit is het tegenovergestelde van \b
, vergeleken met de locatie van elk niet-grenskarakter. Zoals \b
, omdat het overeenkomt met locaties, komt het op zichzelf niet overeen. Het is handig voor het vinden van niet hele woorden.
Voorbeelden:
regex | Invoer | Wedstrijden? |
---|---|---|
\Bb\B | abc | Ja , omdat b niet wordt omgeven door woordgrenzen. |
\Ba\B | abc | Nee , a heeft een woordgrens aan de linkerkant. |
a\B | abc | Ja , a heeft geen woordgrens aan de rechterkant. |
\B,\B | a,,,b | Ja , het komt overeen met de tweede komma omdat \B ook overeenkomt met de spatie tussen twee niet-woordtekens (er moet worden opgemerkt dat er een woordgrens links van de eerste komma en rechts van de tweede is). |
Maak tekst korter maar breek het laatste woord niet
Gebruik om een lange tekst van maximaal N tekens te maken, maar laat het laatste woord intact .{0,N}\b
patroon:
^(.{0,N})\b.*