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








