Regular Expressions
Ordgräns
Sök…
Syntax
- POSIX-stil, slutet på ordet:
[[:>:]] - POSIX-stil, ordets början:
[[:<:]] - POSIX-stil, ordgräns:
[[:<:][:>:]] - SVR4 / GNU, ordets slut:
\> - SVR4 / GNU, början av ordet:
\< - Perl / GNU, ordgräns:
\b - Tcl, ordets slut:
\M - Tcl, början av ordet:
\m - Tcl, ordgräns:
\y - Bärbar ERE, ordets början:
(^|[^[:alnum:]_]) - Bärbar ERE, ordets slut:
([^[:alnum:]_]|$)
Anmärkningar
Matcha komplett ord
\bfoo\b
matchar det fullständiga ordet utan alfanumeriskt och _ föregår eller följer av det.
Ta från regularexpression.info
Det finns tre olika positioner som kan betecknas som ordgränser:
- Innan det första tecknet i strängen, om det första tecknet är ett ordtecken.
- Efter det sista tecknet i strängen, om det sista tecknet är ett ordtecken.
- Mellan två tecken i strängen, där en är ett ordtecken och den andra inte ett ordtecken.
Termen ordkaraktär betyder här något av följande
- Alfabet (
[a-zA-Z]) - Nummer (
[0-9]) - Underscore
_
Kort sagt, ordtecken = \w = [a-zA-Z0-9_]
Hitta mönster i början eller slutet av ett ord
Undersök följande strängar:
foobarfoo
bar
foobar
barfoo
- reguljära uttryck
barkommer att matcha alla fyra strängar, -
\bbar\bmatchar bara den andra, -
bar\bkommer att kunna matcha andra och tredje strängarna och -
\bbarmatchar den andra och den fjärde strängen.
Ordgränser
Metoden för \b
För att göra det lättare att hitta hela ord kan vi använda metatecken \b . Det markerar början och slutet på en alfanumerisk sekvens *. Eftersom det bara tjänar till att markera dessa platser matchar det faktiskt ingen karaktär på egen hand.
*: Det är vanligt att kalla en alfanumerisk sekvens ett ord, eftersom vi kan fånga dess tecken med a \w (ordteckenklassen). Detta kan vara vilseledande, eftersom \w också innehåller siffror och, i de flesta smaker, understrecket.
Exempel:
| regex | Inmatning | Tändstickor? |
|---|---|---|
\bstack\b | stackoverflow | Nej , eftersom det inte finns någon händelse av hela stack |
\bstack\b | foo stack bar | Ja , eftersom det inte finns något före eller efter stack |
\bstack\b | stack!overflow | Ja : det finns ingenting innan stack och ! är inte ett ordkaraktär |
\bstack | stackoverflow | Ja , eftersom det inte finns någonting innan stack |
overflow\b | stackoverflow | Ja , eftersom det inte finns något efter overflow |
Metateckenet \B
Detta är motsatsen till \b , som matchar platsen för varje karaktär utan gränser. Som \b , eftersom det matchar platser matchar det ingen karaktär på egen hand. Det är användbart för att hitta icke hela ord.
Exempel:
| regex | Inmatning | Tändstickor? |
|---|---|---|
\Bb\B | abc | Ja , eftersom b inte är omgiven av ordgränser. |
\Ba\B | abc | Nej , a har en ordgräns på sin vänstra sida. |
a\B | abc | Ja , a har inte ett ordgräns på sin högra sida. |
\B,\B | a,,,b | Ja , det matchar det andra komma eftersom \B också matchar utrymmet mellan två icke-ordtecken (det bör noteras att det finns ett ordgräns till vänster om det första komma och till höger om det andra). |
Gör texten kortare men bryt inte sista ordet
För att göra lång text på de flesta N-tecken men låta det sista ordet vara intakt, använd .{0,N}\b mönster:
^(.{0,N})\b.*