[PHP] Regular Expression (Regex) ep 2.

กลับมาพบกันอีกแล้วสำหรับเรื่อง Regex ในภาคที่สอง สอง สอง สอง สองงงงงงง ใครยังไม่ได้อ่านภาคแรกกลับไปอ่านเลยเดี๋ยวไม่รู้เรื่องน้าจัดเลยที่นี่ >>  [PHP] Regular Expression (Regex) << สำหรับหลายๆคนที่ถามกันเข้ามา ( มีด้วยหรอ ! บอกได้เลยว่า … ไม่มี ) วันนี้ผมจะมาสอนอีกซัก 1 – 2 ตัวและตัวอย่างที่นำไปใช้ประโยชน์ได้จริงอีกด้วยติดตามกันได้แล้วนะฮ๊าฟฟฟฟฟฟฟ :)

Table of Contents

^

ตัวสัญลักษณ์ตัวนี้ ‘^’ หมายถึง ประโยคที่นำมาตรวจจับจะต้องมีคำที่ตามหลัง ^ เช่น ถ้าหาก User ใส่ข้อความมา ‘This is a book. This is not a pen.’ เราต้องการแค่หากมีคำว่า This ขึ้นต้นก็จะผ่านฉะนั้น code ของเราจะเป็นอย่างนี้

[codesyntax lang=”php” title=”Example ^”]

$string = 'This is a book. This is not a pen.';

$pattern = '%^this%';

preg_match($pattern, $subject , $match);

print_r($match);

//output : null

[/codesyntax]

อ้าวทำไม output มันไม่มีล่ะ เอ่อ !! นั่นสิน่าสงสัยมะ เพราะว่าตัวที่เราหานั้นคือ this ตัวอักษร t ตัวเล็กแต่ในประโยคนั้นเป็นตัวใหญ่จึงทำให้คอมมันหาไม่เจอ แล้วสมมติว่าเราต้องการทั้งตัวใหญ่ ตัวเล็กทำยังไงล่ะ ?? คราวนี้ผมจะให้เครื่องมืออีกหนึ่งตัวเป็นเสมือนตัว support ถ้าเรามองในพวกเกมส์ ที่จะช่วยเหลือเราพวกเรื่องเล็กน้อยเหล่านี้ในทาง Regex เราเรียกว่า Modifiers เรามาดูกันที่ใช้บ่อยๆแล้วกันจากตัวอย่างข้างบนถ้าเราต้องการหา ไม่ว่าจะตัวใหญ่หรือเล็กให้เจอล่ะก็ ให้เราใส่ตัว ‘i’ ตามหลังตัวปิดเปิด pattern ดังตัวอย่างข้างล่าง

[codesyntax lang=”php” lines=”no” lines_start=”1″ title=”Modifier ‘i'” highlight_lines=”3″]

$string = 'This is a book. This is not a pen.';

$pattern = '%^this%i';

preg_match($pattern, $string , $match);

print_r($match);

//output : Array ( [0] => This )

[/codesyntax]

คราวนี้เราก็จะเจอคำว่า This ที่เราต้องการไม่ว่าจะตัวเล็กตัวใหญ่ตรงไหนก็ตามก็จะตรวจเจอ เช่น This, tHis, thIs, THIS ฯลฯ แต่ต้องเป็นคำแรกที่อยู่ขึ้นต้นประโยคนะครับเพราะอย่าลืมว่าในตัวอย่างเราใช้ ^ อยู่

บางคนสงสัยว่าแล้วภาษาไทยล่ะตรวจได้ไหม คำตอบคือ ได้ครับจากที่กล่าวมาเราจำเป็นต้องทำ 2 อย่างในการทำให้ใช้ภาษาไทยได้นั่นก็คือ

  • ต้อง save ไฟล์เป็น UTF-8
  • จะต้องใช้ modifier ตัว ‘u’ ( ตัวเล็กนะครับ )

ก็จะสามารถใช้กับภาษาไทยได้แล้ว

เอาล่ะเราไปลองตัวอย่างภาษาไทยกันบ้างดีกว่าพร้อมกับตัวช่วยในการแยกคำตัวใหม่อีกหนึ่งตัวนั้นก็คือ

$

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

[codesyntax lang=”php” title=”Example $”]

$string = 'สวัสดีจ้าทุกคน วันนี้ผมจะมาเล่าเรื่อง Regex กันนะครับ ครับ ครับ ครับ';

$pattern = '%ครับ$%';

preg_match($pattern, $string , $match);

print_r($match);

//output : Array ( [0] => ครับ )

[/codesyntax]

แล้วคุณจะสังเกตุว่าผมไม่ได้ใส่ modifier ตัว ‘u’ ลงไปแล้วมันก็ยังหาเจอใช่ครับหาเจอแต่ว่าผมจะให้ดูอีกตัวอย่างหนึ่งคุณจะร้องอ๋อเลยว่าทำไมผมถึงต้องใช้ u ช่วย

[codesyntax lang=”php” title=”Example modifier u”]

$string = 'สวัสดีจ้าทุกคน วันนี้ผมจะมาเล่าเรื่อง Regex ซึ่งมันอาจจะเป็นเรื่องที่ยากหรือไม่ก็ลองอ่านกันดู';

$pattern = '%จะ[เม]%';

preg_match($pattern, $string , $match);

print_r($match);

//output : Array ( [0] => จะ� )

[/codesyntax]

เราจะได้ค่ามาอย่างนี้เพราะว่ามันตัดคำไม่ถูกต้องอย่างที่เราตั้งใจ ในตัวอย่างข้างบนจริงๆแล้วเราจะได้คำตอบคือ ‘จะม’ เพราะว่ามันเจอคำว่า ‘จะมา’ ก่อนแต่จริงๆคำหลังก็ได้เพราะผมไม่ได้ใช้ preg_match_all นั่นเองถึงได้มาคำเดียวแล้วถ้าคุณลองใส่ตัว u ลงไปเราก็จะได้คำตอบเป็นแบบนี้ครับ

[codesyntax lang=”php” title=”New result”]

Array ( [0] => จะม )

[/codesyntax]

เห็นหรือยังครับความนี้คุณสามารถเลือกคำที่ต้องการได้แหละ ง่ายใช่เปล่าฮ่าๆ เอาล่ะถ้าสมมติเราต้องการใส่ user กรอกแต่ภาษาไทยเท่านั้นทำอย่างไรล่ะ เออ … อย่างนี้ก็เคยเจอนะแบบว่าไม่ให้ใช้ภาษาอังกฤษก็ง่ายๆครับผมแนะนำให้สองแบบคือ

[codesyntax lang=”php” title=”Example thai only”]

$string = 'สวัสดีครับทุกคน';

$string2 = 'test';

$pattern  = '%[ก-ฮ]%u';

$pattern2 = '$[ก-๙]%u';

preg_match_all($pattern,$string,$match1);
preg_match_all($pattern2,$string,$match2);
preg_match_all($pattern,$string2,$match3);

[/codesyntax]

จากตัวอย่างถ้าเราทำการ print_r ($match1); นั้นเราจะไ้้ด้แต่ ตัวอักษรไทยเท่านั้น แล้วถ้าเราลองทำการดูค่าของ $match2 เราได้ตัวอักษรไทยทั้งหมดและรวมสระด้วย สุดท้ายนั้นเราจะหาไม่เจอเพราะว่าเราเอาคำว่า ‘test’ มาตรวจหา

ขอให้สนุกกับการใช้ Regex นะครับความจริงแล้วยังมีลูกเล่นอีกหลายๆอย่างเช่นตรวจหา E-mail ทำอย่างไรหรือว่าชุดตัวเลข IP ทำอย่างไรแต่วันนี้เอาแค่นี้ก่อนจ้าถ้าใครอยากลองวิชาผมมีเว็บให้ลองบนเว็บได้เลยไม่ต้องทำ host รัน PHP ให้เสียเวลาแต่ใช้ modifier ‘u’ ไม่ได้นะจ๊ะหาคำไทยได้ตัดไม่ฉลาดหรอกจ้า

ร้อนวิชาจัดไป http://gskinner.com/RegExr/

แน่นอนว่าบทความนี้ยังมีต่ออีกหลายภาคแน่นอนเพราะว่าเรื่องนี้เอาไปประยุกต์ได้อีกเยอะมาก ทั้งเรื่องการทำ Bot ( อุ๊บส์ ! ) หรือหาข้อมูลจากเว็บชาวบ้าน ( ฮั่นแน่ ! สนใจแล้วสิ ) และการคัดคำหรือการ แทนที่ด้วยคำใหม่ ตัวอย่างที่เราเห็นชัดคือการ แบนคำหยาบ ให้เป็นคำดีๆหรือเป็นเครื่องหมายอื่นๆตามที่เรากำหนด วันนี้พอแค่นี้ก่อนจ้าถ้าเกิดร้อนวิชาแล้วมีข้อสงสัยมาถามได้เลยจ้าจะมาตอบให้นะครับ สวัสดี.

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

Loading

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Message us

เราใช้คุกกี้เพื่อพัฒนาประสิทธิภาพ และประสบการณ์ที่ดีในการใช้เว็บไซต์ของคุณ คุณสามารถศึกษารายละเอียดได้ที่ นโยบายความเป็นส่วนตัว และสามารถจัดการความเป็นส่วนตัวเองได้ของคุณได้เองโดยคลิกที่ ตั้งค่า

Privacy Preferences

คุณสามารถเลือกการตั้งค่าคุกกี้โดยเปิด/ปิด คุกกี้ในแต่ละประเภทได้ตามความต้องการ ยกเว้น คุกกี้ที่จำเป็น

ปฎิเสธทั้งหมด
Manage Consent Preferences
  • คุกกี้ที่จำเป็น
    Always Active

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

  • คุกกี้ที่จำเป็น

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

บันทึก