|
|
| บทเรียนภาษา Perl |
|
บทที่ 5 : การดำเนินการ กับข้อความ
คุณสมบัติเด่น อีกอย่างหนึ่งของ ภาษา Perl คือการดำเนินการ กับข้อความ และตัวแปรที่เก็บข้อมูล ชนิดข้อความ
ภาษา Perl สามารถทำได้ อย่างค่อนข้างมีประสิทธิภาพ (แล้วแต่มุมมองนะครับ สำหรับผมเอง รู้สึกว่ามันค่อนข้าง
ที่จะทำความคุ้นเคย ยากอยู่ซักนิด ในตอนเริ่มต้น แต่ก็ยอมรับว่า มีประสิทธิภาพดีพอสมควร ถ้าคล่องแล้ว
จะใช้ประโยชน์ ได้มากเลยทีเดียว) หัวใจหลักของการดำเนินการ กับข้อมูลข้อความ นี้ก็คือ regular expression
ซึ่งมีใช้กันใน utility หลายๆ โปรแกรมในระบบ Unix
Regular expression
regular expression จะถูกบรรจุ อยู่ในเครื่องหมาย / (เครื่องหมายทับ ที่ใช้ในบ้านเลขที่) และจะใช้ร่วม กับตัวกระทำ
=~ ตัวอย่าง expression ต่อไปนี้ จะมีผลเป็นจริง ก็ต่อเมื่อมีข้อความ the ปรากฎอยู่ในตัวแปร
$test
$test =~ /the/
การตรวจสอบของ regular expression เป็นแบบ case sensitive (ตัวอักษรใหญ่ ตัวอักษรเล็ก ต่างกัน)
เพราะฉนั้นถ้าหากว่า
$test = "The saint is a good movie";
ผลลัพธ์ก็จะเป็นเท็จ จากตัวอย่างข้างต้น หากใช้ร่วมกับตัวกระทำ !~
จะหมายถึงว่า "ไม่มีใน" จากตัวแปร $test ข้างต้นเมื่อใช้กับ
$test !~ /the/
ผลก็คือจริง เพราะว่าไม่มี the อยู่ในตัวแปร $test
ตัวแปรพิเศษ $_
เราสามารถกำหนด เงื่อนไขโดยใช้รูปแบบ ต่อไปนี้ได้
if ($test =~ /the/)
{
print "Yes sir..\n";
}
ถ้าหากกำหนดตัวแปร $test ดังตัวอย่างต่อไปนี้ ชุดคำสั่งข้างบน ก็จะพิมพ์ข้อความออกมา
$test = "The saint is a good movie";
$test = "The mall is big";
แต่ถ้าหากว่าเรากำหนด ค่าของตัวแปร test ให้กับตัวแปรพิเศษ $_ เราก็ไม่จำเป็น
ต้องใช้ตัวกระทำ =~ หรือ !~ และเงื่อนไขข้างบน ก็จะเขียนได้ง่ายลง
เป็นดังนี้
if (/under/)
{
print "Yes sir..\n";
}
ตัวแปรพิเศษ $_ เป็นตัวแปร default ที่ใช้ได้กับ ตัวกระทำ (operation) หลายๆ อย่างในภาษา Perl และใช้ประโยชน์
ได้มาก
regular expression ยังมีการใช้งาน ในอีกหลายรูปแบบ ซึ่งสามารถนำไปประยุกต์ ใช้ได้อีกหลากหลาย
สัญลักษณ์พิเศษต่อไปนี้ สามารถใช้กับ regular expression ได้ ความหมายของสัญลักษณ์ต่างๆ มีดังต่อไปนี้
|
|
คำอธิบาย |
| . |
ตัวอักษร (ตัวเดียว) ใดๆก็ตามยกเว้น ตัวอักษรขึ้นบรรทัดใหม่ |
| ^ |
ส่วนแรกของบรรทัด หรือข้อความ |
| $ |
ส่วนท้ายของบรรทัด หรือข้อความ |
| * |
ตัวอักษรตัวสุดท้าย กี่ตัวก็ได้ หรือจะไม่มีเลยก็ได้ |
| + |
ตัวอักษรตัวสุดท้าย กี่ตัวก็ได้ แต่ต้องมีอย่างน้อย 1 ตัว |
| ? |
ตัวอักษรตัวสุดท้าย หนึ่งตัว หรือจะไม่มีเลยก็ได้ |
ตัวอย่าง การใช้งานสัญลักษณ์ต่างๆ เหล่านี้ (อย่าลืมว่า ต้องอยู่ภายในเครื่องหมาย /.../)
|
|
คำอธิบาย |
| t.e |
อักษร t ที่ตามด้วยอะไรก็ได้ 1 ตัวอักษรและจบด้วย e
จะตรงกับ tae, tee หรือ tre แต่จะไม่ตรงกับ te หรือ tale
|
| ^f |
บรรทัด หรือข้อความ ที่เริ่มต้นด้วยอักษร f |
| ^ftp |
บรรทัด หรือข้อความ ที่เริ่มต้นด้วยคำว่า ftp |
| e$ |
บรรทัด หรือข้อความ ที่ลงท้ายด้วยอักษร e |
| tle$ |
บรรทัด หรือข้อความ ที่ลงท้ายด้วยคำว่า tle |
| und* |
un ที่ตามด้วยตัว d กี่ตัวก็ได้ หรือจะไม่มีตัว d เลยก็ได้
จะตรงกับ un, und, undd, unddd (ไปเรื่อยๆ d กี่ตัวก็ได้)
|
| .* |
ข้อความใดๆ ก็ได้ที่ไม่ประกอบด้วย ตัวอักษรขึ้นบรรทัดใหม่
เพราะว่า . หมายถึงตัวอักษรใดๆก็ได้ยกเว้นตัวอักษรขึ้นบรรทัดใหม่
|
| ^$ |
บรรทัด หรือข้อความว่างเปล่า ไม่มีตัวอักษรใดเลย |
เครื่องหมายวงเล็บเหลี่ยม [ และ ] หมายถึงตัวอักษรใดๆ
ภายในวงเล็บเหลี่ยน และภายในวงเล็บเหลี่ยม เครื่องหมาย - (ขีดกลาง) จะหมายถึง "ระหว่าง" (between)
และ เครื่องหมาย ^ (ชี้ขึ้น) ที่ขึ้นต้นข้อความ ในวงเล็บเหลี่ยม หมายถึง "ไม่" (not)
ตัวอย่างของการใช้งาน เครื่องหมายวงเล็บเหลี่ยม
|
|
คำอธิบาย |
| [qjk] |
q หรือ j หรือ k ตัวใดตัวหนึ่ง |
| [^qjk] |
ไม่ใช่ q หรือ j หรือ k ตัวใดตัวหนึ่ง |
| [a-z] |
อะไรก็ได้ระหว่าง a ถึง z |
| [a-zA-Z] |
ตัวอักษรใดก็ได้ (ไม่ใช่ตัวเลขและ สัญลักษณ์) |
| [a-z]+ |
ข้อความที่มีตัวอักษรตัวเล็ก ประกอบอย่างน้อย 1 ตัวอักษร |
เครื่องหมาย ขีดตามแนวตั้ง | หมายถึง "หรือ" (or) และสามารถใช้ เครื่องหมายวงเล็บ (...)
ในการจัดกลุ่มได้ ดังตัวอย่าง
|
|
คำอธิบาย |
| jelly|cream |
jelly หรือ cream |
| (eg|le)gs |
eggs หรือ legs |
| (da)+ |
da หรือ dada หรือ dadada ไปเรื่อยๆ... |
ต่อไปนี้คือ.. ตัวอักษรพิเศษ
|
|
คำอธิบาย |
| \n |
ขึ้นบรรทัดใหม่ |
| \t |
ตัวอักษร Tab |
| \w |
ตัวอักษรภาษาอังกฤษ หรือตัวเลขใดๆก็ได้
มีความหมาย เหมือนกับ [a-zA-Z0-9_]
|
| \W |
ตัวอักษรใดๆก็ได้ ที่ไม่ใช่ตัวอักษรภาษาอังกฤษ หรือตัวเลข
มีความหมายเหมือนกับ [^a-zA-Z0-0_]
|
| \d |
ตัวเลขใดๆก็ตาม มีความหมายเหมือนกับ [0-9] |
| \D |
ตัวอักษรใดๆก็ได้ ที่ไม่ใช่ตัวเลข มีความหมายเหมือนกับ [^0-9] |
| \s |
ตัวอักษร whitespace ใดๆ เช่น space, tab, ขึ้นบรรทัดใหม่, ฯลฯ |
| \S |
ตัวอักษรใดๆ ที่ไม่ใช่ whitespace |
ถ้าหากต้องการ อ้างถึงตัวอักษรใดๆ ที่ถูกเป็นเครื่องหมาย ที่ใช้ใน regular expression
สามารถใช้เครื่องหมาย \ นำหน้าเครื่องหมายต่างๆ เหล่านั้น ดังนี้
|
|
คำอธิบาย |
| \| |
ขีดตามแนวนอน |
| \[ |
วงเล็บเหลี่ยมเปิด |
| \) |
วงเล็บปิด |
| \* |
เครื่องหมาย ดอกจัน |
| \^ |
เครื่องหมาย ชี้ขึ้น |
| \/ |
เครื่องหมาย slash |
| \\ |
เครื่องหมาย backslash |
การบ้าน
เขียนโปรแกรม นับว่าในตัวแปรนั้นๆ มีตัวอักษรหรือข้อความ ต่อไปนี้เป็นจำนวน เท่าไหร่
- ตัวอักษร a
- คำว่า the
- คำว่า The หรือ the
เนื้อหาส่วนถัดไป.. ->
|
|
|