ค้นหาเว็บไซต์

Regex ใน PowerShell | Regex MetaCharacter ใน PowerShell พร้อมตัวอย่าง


ข้อมูลเบื้องต้นเกี่ยวกับ Regex ใน PowerShell

นิพจน์ทั่วไปคือการผสมผสานอักขระพิเศษซึ่งช่วยให้เราค้นหาข้อมูลประเภทที่แตกต่างและยากจากข้อความและสตริงใดๆ สามารถใช้เพื่อค้นหา แก้ไข หรือจัดการข้อความและข้อมูลได้ เนื่องจาก PowerShell สร้างบน .NET ดังนั้นไวยากรณ์ regex ทั้งหมดของ .NET จึงรองรับ PowerShell ด้วยเช่นกัน ฉันขอยกตัวอย่างให้คุณดู สมมติว่าคุณมีสตริงยาวที่ประกอบด้วยตัวเลข ตัวอักษร และอักขระพิเศษ และคุณต้องการทราบตำแหน่งเริ่มต้นของตัวเลข มากกว่าที่คุณจะสามารถใช้นิพจน์ regex ได้ สมมติว่าคุณมีรายชื่อผู้ใช้จำนวนมาก แต่คุณต้องการเห็นเฉพาะผู้ใช้ที่มี "sh" เป็นสตริงสุดท้าย ตัวอย่าง “Akash ”, ” Vikash ”, ” Rakesh ”, ” Suman ”, ” Amit ”, ” Anish ” และเราต้องการเห็นเฉพาะชื่อเหล่านั้นที่มี “sh” เป็นสตริงย่อย ดังนั้นชื่อจะเป็น “Akash ”, ” Vikash ”, ” Rakesh ”, ” Anish ” เนื่องจากทั้งหมดมี “sh ” เป็นสตริงย่อย

อธิบาย Regex MetaCharacter ใน PowerShell

หากคุณเคยทำงานกับสคริปต์ต่างๆ ของ PowerShell หรือคุณได้พัฒนาสคริปต์แล้ว โดยทั่วไปแล้ว คุณจะต้องติดต่อกับนิพจน์ทั่วไป

ไวยากรณ์:

$some_Data = @('Ranjan', 'Anish','Ranjana',”Anjana”, ”Sanjana”)
$some_Data | Where-Object {$_ -match 'Jan'}

ที่นี่ เรากำลังสร้างอาร์เรย์ของสตริง จากนั้นเราเขียนแบบสอบถามที่แสดง ”Ranjan ”, ” Ranjana ”, ” Anjana ”, ” Sanjana ” มันจะไม่แสดง “Anish ” เพราะ “Anish ” ไม่ตรงกับ Jan ลวดลาย. ตัวดำเนินการ -match ยังสามารถใช้ได้โดยไม่ต้องใช้ Where-Object cmdlet

'Ranjan' -match 'Jan'

มันจะคืนค่า True เนื่องจาก “Jan ” เป็นสตริงย่อยของ “Ranjan ”

'sh' -match 'Ranjan'

มันจะคืนค่าเท็จเนื่องจาก "sh " ไม่ใช่สตริงย่อยของ "Ranjan "

ในตัวอย่างด้านล่าง เราจะแทนที่ "เด็กดี" ด้วย "เด็กเลว" ดังนั้นให้เปลี่ยนก่อนจึงจะเปรียบเทียบและตรงกันแล้วจึงเปลี่ยน

'Ranjan is a good boy' -replace 'good boy', 'bad boy'

เอาต์พุต:

จากด้านบนเราจะเห็นได้ว่า หลังจากคำสั่ง -replace เราได้รับผลลัพธ์เป็น “Ranjan is a bad boy” ตัวดำเนินการ "-replace" ดำเนินการหลายอย่าง เช่น ค้นหาสตริงที่ตรงกันแล้วแทนที่ ดังนั้นจึงสามารถอธิบายการใช้นิพจน์ทั่วไปของ PowerShell ได้ เนื่องจากส่วนใหญ่จะใช้สำหรับการเปรียบเทียบและแทนที่สตริงที่ตรงกัน

ตัวอย่างการใช้งาน Regex ใน PowerShell

ด้านล่างนี้เป็นตัวอย่างบางส่วน:

ตัวอย่าง #1

ที่นี่เราจะจับคู่อักขระทุกประการที่มีทุกที่ในสตริงที่กำหนด

"This is home town " -match "home"
“This is your hometown” -match “town”
“It's raining today” -match “home”

เอาต์พุต:

ตัวอย่าง #2

ให้เราดูตัวอย่างประเภทต่างๆ เพิ่มเติมที่นี่ สมมติว่าเราต้องการตรวจสอบการจับคู่ตัวอักษรหรือการจับคู่ตัวอักษรตัวเดียว

"Ranjan" -match "R"
"Akash" -match "A"
"Vikash" -match "R"

เอาต์พุต:

ตัวอย่าง #3

ในตัวอย่างนี้ เราจะจับคู่ค่าความโกรธ การใช้ยัติภังค์ (-) ช่วยให้คุณสามารถระบุอักขระที่อยู่ติดกัน

"Ranjan" -match "[A-Z]anjan"
"Ranjan" -match "[A-Z]"
"Ranjan" -match "[i-k]"
"Ranjan" -match "[k-p]"
"Ranjan" -match "[k-k]"
"Ranjan" -match "[k-l]"
"Ranjan" -match "[k-o]"
"Ranjan" -match "[k-p]"

ในตัวอย่างทั้งหมด จะมีการตรวจสอบว่าตัวอักษร “Ranjan ” ตกอยู่ภายใต้ความโกรธ [k-l],[k-o],[k-p] หรือไม่ หากช่วงที่กำหนดอยู่ภายใต้สตริงที่กำหนด ก็จะส่งกลับค่าจริง มิฉะนั้นจะคืนค่าเป็นเท็จ

เอาต์พุต:

ตัวอย่าง #4

ที่นี่เราจะจับคู่อักขระทั้งหมด ยกเว้นอักขระที่อยู่ในวงเล็บ สมมติว่าเรามีรายการหมายเลขทะเบียนแต่เราต้องการดูทั้งหมดยกเว้นการลงทะเบียนนักเรียนรุ่นปี 2008 เราก็สามารถใช้การจับคู่ประเภทนี้ได้

"2009students" -match "[^2008]students"
“2009students" -match "[^2008]students"
“2008students" -match "[^2008]students"
“2012students" -match "[^2008]students"
“2008students" -match "[^2008]students"
“2011students" -match "[^2008]students"

เอาต์พุต:

ตัวอย่าง #5

ในตัวอย่างนี้ เราจะจับคู่จุดเริ่มต้นของอักขระ สมมติว่าเรามีผู้ใช้จำนวนมาก และเราต้องการตรวจสอบว่าผู้ใช้รายนี้มีอักขระเฉพาะที่จุดเริ่มต้นซึ่งเราต้องการตรวจสอบหรือไม่

"Ranjan" -match "^Ra"
“Suraj” -match “^Su”
“Bhanu” -match “^Bh”
“Anny” -match “^Ki”
“Vikash” -match “^Ji”

ในตัวอย่างข้างต้น เรากำลังตรวจสอบว่าสตริงที่กำหนดขึ้นต้นด้วย “Ra ” สำหรับชื่อ “Ranjan ” ซึ่งเป็นจริงหรือไม่ และในทำนองเดียวกัน “Su ” จากชื่อ “Suraj ” ซึ่งเป็นจริงอีกครั้ง แต่ไม่เป็นจริงสำหรับ “กี” แทนชื่อ “แอนนี่” ชื่อแอนนี่ขึ้นต้นด้วย “อัน” ไม่ใช่ “กี”

เอาต์พุต:

ตัวอย่าง #6

ตอนนี้เราจะจับคู่อักขระท้าย โดยจะตรวจสอบว่าอักขระท้ายตรงกับตัวอักษรนิพจน์ที่กำหนดหรือไม่

"Ranjan" -match "a $"
“Suraj” -match “aj$”
“Bhanu” -match “hu$”
“Anny” -match “ny$”
“Vikash” -match “up to $”

ในตัวอย่างข้างต้น เรากำลังตรวจสอบว่าสตริงที่กำหนดลงท้ายด้วย “an ” สำหรับชื่อ “Ranjan ” ซึ่งเป็นจริงหรือไม่ และในทำนองเดียวกัน “aj ” จากชื่อ “Suraj ” ซึ่งเป็นจริงอีกครั้ง แต่ไม่เป็นจริงสำหรับ “หู” เป็นชื่อ “ภาณุ” ชื่อภาณุลงท้ายด้วย “นุ” ไม่ใช่ “หู”

เอาต์พุต:

ตัวอย่าง #7

จนถึงตอนนี้เราได้หารือกันเฉพาะคำศัพท์หรือสำนวนที่เรียงลำดับกันเท่านั้น ตอนนี้ สมมติว่าเราต้องการตรวจสอบการมีอยู่ของตัวอักษรที่ใดก็ได้ภายในสตริงที่ไม่เรียงลำดับ ตัวอย่างเช่น สมมติว่าคุณต้องตรวจสอบว่าสตริง “สวัสดีเพื่อน ฉันเป็นวิศวกรซอฟต์แวร์ ” มีคำว่า “hs ” หรือไม่ ดังนั้นเราจึงเห็นได้ว่าอักขระสตริงที่กำหนดนั้นมีอยู่แต่ไม่ต่อเนื่องกัน

$string =“Hello friend I am a software engineer”
$string -match "[Hs]"
$string -match "[ip]"
$string -match "[se]"
$string -match "[ls]"
$string -match "[zz]"

ในตัวอย่างข้างต้น หากตัวอักษรตัวใดตรงกับตัวอักษรตัวใดตัวหนึ่งจะคืนค่าเป็น "จริง" โดยไม่คำนึงถึงตำแหน่งของตัวอักษร หลายครั้งเราอาจต้องเผชิญกับสถานการณ์เช่นนี้ซึ่งเราอาจจำเป็นต้องรู้ว่ามีสตริงตัวอักษรอยู่จริง

เอาต์พุต:

บทสรุป

หากคุณพิจารณาดูการใช้นิพจน์ทั่วไปของ PowerShell อย่างใกล้ชิด คุณจะพบว่ามันสามารถแก้ไขปัญหาจำนวนมหาศาลในระดับผู้ดูแลระบบได้ เช่นการค้นหาตัวอักษรที่ตรงกันในตำแหน่งเริ่มต้นหรือสิ้นสุดหรือค้นหาตัวอักษรที่ใดก็ได้ภายในสตริง

บทความที่เกี่ยวข้อง