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

วิธีเปรียบเทียบสตริงใน PowerShell


หากคุณกำลังทำงานกับสตริงใน PowerShell คุณอาจได้รับข้อกำหนดในการเปรียบเทียบสตริงใน PowerShell ในบทช่วยสอน PowerShell นี้ ฉันจะอธิบายวิธีเปรียบเทียบสตริงใน PowerShell โดยใช้วิธีต่างๆ พร้อมตัวอย่าง

หากต้องการเปรียบเทียบสตริงใน PowerShell คุณสามารถใช้ตัวดำเนินการ -eq สำหรับการตรวจสอบความเท่าเทียมกันโดยไม่คำนึงถึงตัวพิมพ์เล็กและใหญ่ หรือ -ceq สำหรับการเปรียบเทียบโดยคำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ เมธอด .Equals() ให้ความยืดหยุ่นกับตัวเลือกต่างๆ เช่น OrdinalIgnoreCase สำหรับการพิจารณาขนาดตัวพิมพ์ สำหรับการจับคู่รูปแบบ ให้ใช้ตัวดำเนินการ -like พร้อมไวด์การ์ด หรือ -match สำหรับนิพจน์ทั่วไป นอกจากนี้ Compare-Object ยังสามารถเปรียบเทียบชุดสตริงสองชุดเพื่อเน้นความแตกต่างได้

เปรียบเทียบสตริงใน PowerShell

ต่อไปนี้เป็นวิธีการต่างๆ ที่คุณสามารถใช้เพื่อเปรียบเทียบสตริงใน PowerShell

1. การใช้ตัวดำเนินการ -eq

ตัวดำเนินการ PowerShell -eq ใช้เพื่อตรวจสอบว่าสองสตริงเท่ากันทุกประการหรือไม่ ตามค่าเริ่มต้น การเปรียบเทียบนี้ไม่คำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่

ตัวอย่าง:

$string1 = "NewYork"
$string2 = "newyork"

if ($string1 -eq $string2) {
    Write-Output "The strings are equal."
} else {
    Write-Output "The strings are not equal."
}

ในตัวอย่างนี้ ผลลัพธ์จะเป็น “สตริงเท่ากัน” เนื่องจากตัวดำเนินการ -eq ละเว้นตัวพิมพ์เล็กและใหญ่ตามค่าเริ่มต้น

ภาพหน้าจอด้านล่างแสดงผลลัพธ์หลังจากที่ฉันรันสคริปต์ PowerShell ด้านบนโดยใช้โค้ด VS

สำหรับการเปรียบเทียบแบบคำนึงถึงขนาดตัวพิมพ์ คุณสามารถใช้ตัวดำเนินการ -ceq ใน PowerShell ได้ เช่นเดียวกับตัวอย่างด้านล่าง

$string1 = "NewYork"
$string2 = "newyork"

if ($string1 -ceq $string2) {
    Write-Output "The strings are equal."
} else {
    Write-Output "The strings are not equal."
}

ที่นี่ผลลัพธ์จะเป็น “สตริงไม่เท่ากัน” เพราะ -ceq พิจารณาตัวพิมพ์ของสตริง

ที่นี่คุณสามารถดูผลลัพธ์ได้ในภาพหน้าจอด้านล่าง:

อ่านตัวแปรแปลงเป็นสตริงใน PowerShell

2. การใช้ตัวดำเนินการ -ne

ตัวดำเนินการ -ne ตรวจสอบว่าสองสตริงไม่เท่ากันใน PowerShell หรือไม่ นอกจากนี้ยังไม่คำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่โดยค่าเริ่มต้น

ตัวอย่าง:

$string1 = "JaneDoe"
$string2 = "JaneSmith"

if ($string1 -ne $string2) {
    Write-Output "The strings are not equal."
} else {
    Write-Output "The strings are equal."
}

ผลลัพธ์จะเป็น “สตริงไม่เท่ากัน” เพราะ JaneDoe แตกต่างจาก JaneSmith

ฉันรันโค้ดด้านบนแล้ว และคุณจะเห็นผลลัพธ์ในภาพหน้าจอด้านล่าง:

3. การใช้เมธอด .Equals()

นี่เป็นอีกวิธีหนึ่งใน PowerShell เพื่อเปรียบเทียบสตริง ซึ่งเป็นวิธี .Equals() เมธอด .Equals() ช่วยให้คุณสามารถเปรียบเทียบสตริงโดยระบุการพิจารณาตัวพิมพ์เล็กและตัวพิมพ์ใหญ่

ตัวอย่าง:

$string1 = "MichaelSmith"
$string2 = "michaelsmith"

if ($string1.Equals($string2, [System.StringComparison]::OrdinalIgnoreCase)) {
    Write-Output "The strings are equal."
} else {
    Write-Output "The strings are not equal."
}

ในตัวอย่างนี้ ผลลัพธ์จะเป็น “สตริงเท่ากัน” เนื่องจาก OrdinalIgnoreCase ทำให้การเปรียบเทียบไม่คำนึงถึงขนาดตัวพิมพ์

สำหรับการเปรียบเทียบแบบคำนึงถึงขนาดตัวพิมพ์ คุณสามารถใช้ Ordinal:

if ($string1.Equals($string2, [System.StringComparison]::Ordinal)) {
    Write-Output "The strings are equal."
} else {
    Write-Output "The strings are not equal."
}

ที่นี่ผลลัพธ์จะเป็น “สตริงไม่เท่ากัน” เนื่องจาก Ordinal บังคับใช้การพิจารณาตัวพิมพ์เล็กและตัวพิมพ์ใหญ่

อ่านแยกสตริงด้วย Word ใน PowerShell

4. การใช้ Compare-Object Cmdlet

Compare-Object cmdlet มีประโยชน์เมื่อเปรียบเทียบชุดสตริงสองชุดและค้นหาความแตกต่างใน PowerShell

ตัวอย่าง:

$array1 = @("AliceJohnson", "BobSmith", "CharlieBrown")
$array2 = @("AliceJohnson", "CharlieBrown", "DavidWilliams")

$comparison = Compare-Object -ReferenceObject $array1 -DifferenceObject $array2

foreach ($difference in $comparison) {
    Write-Output $difference
}

ผลลัพธ์จะแสดงความแตกต่างระหว่างสองอาร์เรย์:

InputObject SideIndicator
----------- -------------
BobSmith    <=
DavidWilliams =>

5. การใช้ตัวดำเนินการ -like และ -match

คุณยังสามารถใช้ตัวดำเนินการ -like และ -match เพื่อเปรียบเทียบสตริงใน PowerShell

ตัวดำเนินการ -like ใช้สำหรับการจับคู่รูปแบบไวด์การ์ด ในขณะที่ตัวดำเนินการ -match จะใช้นิพจน์ทั่วไป

ตัวอย่างที่มี -like:

$string = "JessicaJones"

if ($string -like "Jessica*") {
    Write-Output "The string starts with 'Jessica'."
}

ผลลัพธ์จะเป็น “สตริงเริ่มต้นด้วย 'เจสสิก้า'” เพราะ -like รองรับรูปแบบไวด์การ์ด

ตัวอย่างที่มี -match:

$string = "JessicaJones"

if ($string -match "^Jessica") {
    Write-Output "The string starts with 'Jessica'."
}

ผลลัพธ์จะเหมือนกับตัวอย่างก่อนหน้า แต่ -match ใช้นิพจน์ทั่วไปเพื่อทำการเปรียบเทียบ

บทสรุป

การเปรียบเทียบสตริงใน PowerShell สามารถทำได้หลายวิธี เช่น การตรวจสอบความเท่าเทียมกันด้วย -eq หรือใช้ .Equals() หรือใช้การจับคู่รูปแบบขั้นสูงกับ -like และ -match

ฉันหวังว่าตอนนี้คุณคงเข้าใจดีถึงวิธีเปรียบเทียบสตริงใน PowerShell โดยใช้วิธีต่างๆ

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