about_Regular_Expressions
Rövid leírás
A PowerShell szokásos kifejezéseit ismerteti.
Hosszú leírás
Feljegyzés
Ez a cikk a normál kifejezések PowerShellben való használatára szolgáló szintaxist és metódusokat mutatja be. Nem terjed ki az összes lehetséges kifejezésre. A teljesebb referenciáért tekintse meg a Regular Expression Language – Quick Reference (Reguláris kifejezés nyelve – gyorshivatkozás) című témakört.
A reguláris kifejezés a szövegnek megfelelő minta. Konstans karakterekből, operátorokból és egyéb szerkezetekből állhat.
Ez a cikk a PowerShell szokásos kifejezésszintaxisát mutatja be. A PowerShell több olyan operátort és parancsmagot is használ, amelyek normál kifejezéseket használnak. Szintaxisukról és használatukról az alábbi hivatkozásokon olvashat bővebben.
- Sztring kijelölése
- -egyezés és -csere operátorok
- -felosztási operátor
- kapcsoló utasítás -regex beállítással
A PowerShell normál kifejezései alapértelmezés szerint nem érzékenyek a kis- és nagybetűkre. A fentiekben bemutatott módszerek eltérő módon kényszerítik a kis- és nagybetűk érzékenységét.
- Ehhez
Select-String
használja a CaseSensitive paramétert . - Normál kifejezéseket használó operátorok esetén használja a kis- és nagybetűket megkülönböztető verziót:
-cmatch
,-creplace
vagy-csplit
- Az utasításhoz
switch
használja a-casesensitive
Karakterkonstansok
A reguláris kifejezés lehet literális karakter vagy sztring. A kifejezés hatására a motor pontosan megfelel a megadott szövegnek.
# This statement returns true because book contains the string "oo"
'book' -match 'oo'
Karakterosztályok
Bár a karakterkonstansok akkor működnek, ha ismeri a pontos mintát, a karakterosztályok lehetővé teszik, hogy kevésbé specifikusak legyenek.
Karaktercsoportok
[character group]
lehetővé teszi, hogy egyszerre tetszőleges számú karaktert egyezzen meg, míg [^character group]
csak a CSOPORTBAN NEM szereplő karaktereket.
# This expression returns true if the pattern matches big, bog, or bug.
'big' -match 'b[iou]g'
Ha az egyező karakterek listája tartalmazza a kötőjel karaktert (-
), a karaktertartomány-kifejezéstől való megkülönböztetéséhez a lista elején vagy végén kell lennie.
Karaktertartományok
A minta karaktertartomány is lehet. A karakterek lehetnek betűrendesek [A-Z]
, numerikusak [0-9]
vagy akár ASCII-alapúak [ -~]
(az összes nyomtatható karakter).
# This expression returns true if the pattern matches any 2 digit number.
42 -match '[0-9][0-9]'
Telefonszámok
A \d
karakterosztály minden tizedesjegynek megfelel. Ezzel szemben minden \D
nem decimális számjegynek egyeznie kell.
# This expression returns true if it matches a server name.
# (Server-01 - Server-99).
'Server-01' -match 'Server-\d\d'
Word-karakterek
A \w
karakterosztály minden szó karakterével [a-zA-Z_0-9]
megegyezik. Ha nem szó nélküli karaktereket szeretne használni, használja \W
a következőt: .
# This expression returns true.
# The pattern matches the first word character 'B'.
'Book' -match '\w'
Helyettesítő karakterek
A pont (.
) egy helyettesítő karakter a reguláris kifejezésekben. Minden karakternek megfelel, kivéve az új vonalat (\n
).
# This expression returns true.
# The pattern matches any 4 characters except the newline.
'a1\ ' -match '....'
Térköz
Tetszőleges szóköz karaktert egyeztethet a \s
karakterosztálysal. A nem térbeli karakterekkel \S
egyezhet. A literális szóköz karaktereket
a .
# This expression returns true.
# The pattern uses the whitespace character class to match the leading
# space and a literal space to matching the trailing space.
' - ' -match '\s- '
Kvantitátorok
A kvantátorok azt szabályozzák, hogy az egyes elemek hány példánya legyen jelen a bemeneti sztringben.
A PowerShellben elérhető kvantitátorok közül néhány a következő:
Quantifier | Leírás |
---|---|
* |
Nulla vagy több alkalommal. |
+ |
Egy vagy több alkalommal. |
? |
Nulla vagy egyszer. |
{n,m} |
Legalábbis n , de nem többször m . |
A csillag (*
) egyezik az előző elem nullával vagy több alkalommal. Az eredmény az, hogy még az elem nélküli bemeneti sztring is egyezik.
# This returns true for all account name strings even if the name is absent.
'ACCOUNT NAME: Administrator' -match 'ACCOUNT NAME:\s*\w*'
A pluszjel (+
) egy vagy több alkalommal megfelel az előző elemnek.
# This returns true if it matches any server name.
'DC-01' -match '[A-Z]+-\d\d'
A kérdőjel ?
egyezik az előző nullával vagy egyszer. A csillaghoz *
hasonlóan a sztringek is megegyeznek azokkal a sztringekkel, ahol az elem hiányzik.
# This returns true for any server name, even server names without dashes.
'SERVER01' -match '[A-Z]+-?\d\d'
A {n, m}
kvantáló többféleképpen is használható a kvantáló részletes vezérlésének engedélyezéséhez. A második elem m
és a vessző ,
megadása nem kötelező.
Quantifier | Leírás |
---|---|
{n} |
Pontosan n meg kell egyeznie a pontos számmal. |
{n,} |
Legalább n hányszor egyezzen meg. |
{n,m} |
Egyezés a kettő között n és m az időpontok száma között. |
# This returns true if it matches any phone number.
'111-222-3333' -match '\d{3}-\d{3}-\d{4}'
Horgonyok
A horgonyok lehetővé teszik, hogy a bemeneti sztringen belüli egyezések pozíciója alapján egyezés sikeres vagy sikertelen legyen.
A két gyakran használt horgony és ^
$
. A simító ^
megegyezik egy sztring elejével, és $
egy sztring végével. A horgonyok lehetővé teszik, hogy egy adott pozícióban egyezzen a szövegével, miközben elveti a nem kívánt karaktereket is.
# The pattern expects the string 'fish' to be the only thing on the line.
# This returns FALSE.
'fishing' -match '^fish$'
Feljegyzés
Horgonyt ()$
tartalmazó regex definiálásakor a regexet egyetlen idézőjelbe ('
) kell befoglalnia. Ha kettős idézőjeleket ("
) használ, a PowerShell kibontható változókifejezésként értelmezi a sztringet.
Ha horgonyokat használ a PowerShellben, ismernie kell az egysoros és a többsoros reguláris kifejezési beállítások közötti különbséget.
- Többsoros: A többsoros mód a bemeneti sztring eleje és
$
vége helyett az összes SOR elejét és végét kényszeríti^
. - Egysoros: Az egysoros mód a bemeneti sztringet egysorosként kezeli.
Kényszeríti a
.
karaktert, hogy megfeleljen minden karakternek (beleértve az új vonalakat is), ahelyett, hogy minden karaktert egyeztet, KIVÉVE az új vonalat\n
.
Ha többet szeretne megtudni ezekről a lehetőségekről és azok használatáról, látogasson el a Reguláris kifejezés nyelve – rövid útmutató.
Karakterek menekülése
A fordított perjel (\
) a karakterek feloldására szolgál, így a normál kifejezésmotor nem elemzi őket.
A következő karakterek vannak fenntartva: []().\^$|?*+{}
.
Ezeket a karaktereket a mintáiban el kell menekülnie, hogy megfeleljen a bemeneti sztringeknek.
# This returns true and matches numbers with at least 2 digits of precision.
# The decimal point is escaped using the backslash.
'3.141' -match '3\.\d{2,}'
A regex osztálynak van egy statikus metódusa, amely képes feloldani a szöveget.
[regex]::escape('3.\d{2,}')
3\.\\d\{2,}
Feljegyzés
Ez feloldja az összes fenntartott reguláris kifejezés karakterét, beleértve a karakterosztályokban használt meglévő fordított perjeleket is. Ügyeljen arra, hogy csak a minta azon részén használja, amelyet el kell menekülnie.
Egyéb karakterek feloldása
A speciális karaktertípusokhoz fenntartott karakterkioldók is használhatók.
Az alábbiakban néhány gyakran használt karaktermenekülést ismertetünk:
Karakteres feloldás | Leírás |
---|---|
\t |
Egy lap egyezése |
\n |
Egy új vonalnak felel meg |
\r |
Megegyezik egy kocsivissza |
Csoportok, rögzítések és helyettesítések
A csoportosítási szerkezetek egy bemeneti sztringet olyan részsztringekre választanak el, amelyek rögzíthetők vagy figyelmen kívül hagyhatók. A csoportosított alsztringeket alexpresszióknak nevezzük. Alapértelmezés szerint az alkifejezések számozott csoportokban vannak rögzítve, de hozzájuk is rendelhet neveket.
A csoportosítási szerkezet egy zárójelekkel körülvett reguláris kifejezés. A rendszer minden olyan szöveget rögzít, amely megfelel a zárt reguláris kifejezésnek. Az alábbi példa két rögzítési csoportra bontja a bemeneti szöveget.
'The last logged on user was CONTOSO\jsmith' -match '(.+was )(.+)'
True
$Matches
A Kivonatoló automatikus változóval lekérheti a rögzített szöveget.
A teljes egyezést jelképező szöveg a kulcsban 0
lesz tárolva. Fontos megjegyezni, hogy a $Matches
kivonatoló csak az egyező minták első előfordulását tartalmazza.
$Matches.0
The last logged on user was CONTOSO\jsmith
A rögzítéseket numerikus egész számbillentyűk tárolják, amelyek balról jobbra növekednek. A Capture 1
az összes szöveget tartalmazza, amíg a felhasználónév, a rögzítés 2
csak a felhasználónevet tartalmazza.
$Matches
Name Value
---- -----
2 CONTOSO\jsmith
1 The last logged on user was
0 The last logged on user was CONTOSO\jsmith
Fontos
A 0
kulcs egy egész szám. A tárolt érték eléréséhez bármely Kivonatoló metódust használhat.
PS> 'Good Dog' -match 'Dog'
True
PS> $Matches[0]
Dog
PS> $Matches.Item(0)
Dog
PS> $Matches.0
Dog
Elnevezett rögzítések
Alapértelmezés szerint a rögzítések növekvő számsorrendben vannak tárolva, balról jobbra.
Nevet is hozzárendelhet egy rögzítési csoporthoz. Ez a név a Kivonatoló automatikus változó kulcsává $Matches
válik.
Egy rögzítési csoportban a rögzített adatok nevesített kulcs alatt való tárolására használható ?<keyname>
.
PS> $string = 'The last logged on user was CONTOSO\jsmith'
PS> $string -match 'was (?<domain>.+)\\(?<user>.+)'
True
PS> $Matches
Name Value
---- -----
domain CONTOSO
user jsmith
0 was CONTOSO\jsmith
PS> $Matches.domain
CONTOSO
PS> $Matches.user
jsmith
Az alábbi példa a legújabb naplóbejegyzést tárolja a Windows biztonság Naplóban. A megadott reguláris kifejezés kinyeri a felhasználónevet és a tartományt az üzenetből, és a következő kulcsok alatt tárolja őket: N a névhez és d a tartományhoz.
$log = (Get-WinEvent -LogName Security -MaxEvents 1).message
$r = '(?s).*Account Name:\s*(?<N>.*).*Account Domain:\s*(?<D>[A-Z,0-9]*)'
$log -match $r
True
$Matches
Name Value
---- -----
D CONTOSO
N jsmith
0 A process has exited....
További információ: Szerkezetek csoportosítása reguláris kifejezésekben.
Helyettesítések reguláris kifejezésekben
A regex regex operátorral történő -replace
használata lehetővé teszi a szöveg dinamikus cseréjét rögzített szöveg használatával.
<input> -replace <original>, <substitute>
<input>
: A keresendő sztring<original>
: A bemeneti sztringben való kereséshez használt reguláris kifejezés<substitute>
: Regex helyettesítési kifejezés a bemeneti sztringben található egyezések helyére.
<substitute>
Az <original>
operandusokra a reguláris kifejezésmotor szabályai vonatkoznak, például a karakteres menekülésre vagy a helyettesítő kifejezésekre. A csereminta egy vagy több helyettesítésből és literális karakterekből állhat.
A rögzítési csoportok a sztringben a <substitute>
csoportazonosító előtti karakterrel $
hivatkozhatók.
A rögzítési csoportokra kétféleképpen hivatkozhat: Szám és Név szerint.
Szám szerint – A csoportok rögzítése balról jobbra számozott.
'John D. Smith' -replace '(\w+) (\w+)\. (\w+)', '$1.$2.$3@contoso.com'
John.D.Smith@contoso.com
Név szerint – A rögzítési csoportok név alapján is hivatkozhatók.
'CONTOSO\Administrator' -replace '\w+\\(?<user>\w+)', 'FABRIKAM\${user}'
FABRIKAM\Administrator
A $&
kifejezés az összes egyező szöveget jelöli.
'Gobble' -replace 'Gobble', '$& $&'
Gobble Gobble
Figyelmeztetés
Mivel a karaktert sztringbővítésben $
használják, literális sztringeket kell használnia helyettesítéssel, vagy el kell menekülnie a $
karakterből dupla idézőjelek használatakor.
'Hello World' -replace '(\w+) \w+', '$1 Universe'
"Hello World" -replace "(\w+) \w+", "`$1 Universe"
Hello Universe
Hello Universe
Továbbá, ha literális karaktert szeretne $
használni, használja $$
a normál feloldó karakterek helyett. Dupla idézőjelek használata esetén továbbra is meneküljön az összes példánytól $
, hogy elkerülje a helytelen helyettesítést.
'5.72' -replace '(.+)', '$$$1'
"5.72" -replace "(.+)", "`$`$`$1"
$5.72
$5.72
A helyettesítő kifejezésekre vonatkozó részletes információkért lásd : Helyettesítések a reguláris kifejezésekben.
Lásd még
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: