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
bar
kommer att matcha alla fyra strängar, -
\bbar\b
matchar bara den andra, -
bar\b
kommer att kunna matcha andra och tredje strängarna och -
\bbar
matchar 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.*