PHP นิพจน์ทั่วไปสำหรับแท็ก PHP นิพจน์ทั่วไป ตัวอย่างนิพจน์ทั่วไปในการรับรูปภาพจากโค้ด html

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

  • PREG_PATTERN_ORDER;
  • PREG_SET_ORDER

จัดเรียงตามตัวเลือกที่ 1 จัดกลุ่มผลการค้นหาตามหมายเลขนิพจน์ทั่วไป (ค่าเริ่มต้น) ในกรณีที่สอง ผลลัพธ์จะถูกจัดกลุ่มตามตำแหน่งในแถว

สัญลักษณ์ - องค์ประกอบเทมเพลต

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

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

  • a เป็นองค์ประกอบเฉพาะของเทมเพลต - สัญลักษณ์
  • a-z เป็นองค์ประกอบเทมเพลต ซึ่งมีอักขระหนึ่งตัวด้วย แต่มีค่าตั้งแต่ a ถึง z เท่านั้น - ภาษาละตินทั้งหมดเป็นตัวพิมพ์เล็ก
  • 0-9 คือเลขตัวเดียว เลขอะไรก็ได้ แต่ 1-3 คือ 1, 2 หรือ 3 เท่านั้น

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

แม่แบบฟังก์ชัน

การจับคู่ PHP preg ทั้งหมดใช้ไวยากรณ์นิพจน์ทั่วไปมาตรฐาน ระบุสัญลักษณ์ใดสัญลักษณ์หนึ่งที่ระบุไว้:

  • เฉพาะอักขระ a, b, c
  • [^ABC] ทุกอย่างยกเว้นอักขระ A, B, C
  • \w และ \W - ข้อความหรืออักขระที่ไม่ใช่ข้อความ
  • \s และ \S - อักขระช่องว่างหรืออักขระที่ไม่ใช่ช่องว่าง
  • \d และ \D - หลักหรือไม่ใช่หลัก

อักขระซ้ำจะแสดงด้วยเครื่องหมายปีกกา - (n,m) และอ้างอิงถึงอักขระก่อนหน้า

  • n หมายถึงการซ้ำของ "ไม่น้อยกว่า";
  • ม. - การซ้ำซ้อนของ "ไม่มาก"

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

พูดง่ายๆ ก็คือโดยระบุอักขระจริงที่จำเป็น ระบุจำนวนที่ต้องการ และพิจารณาว่าอักขระ “^” ตรงกับจุดเริ่มต้นและ “$” ที่ท้ายบรรทัด คุณสามารถสร้างเทมเพลตง่ายๆ ได้ ด้วยการวิเคราะห์นิพจน์ทั่วไปจริงและดีบั๊กจากผู้เชี่ยวชาญที่มีคุณสมบัติเหมาะสม คุณจะได้รับความรู้ที่ชัดเจนในการสร้างแอปพลิเคชันที่ซับซ้อนของ preg match all คลังแสงของ PHP ไม่ได้จำกัดอยู่เพียงสองฟังก์ชันนี้เท่านั้น แต่ยังเป็นฟังก์ชันที่ใช้บ่อยที่สุดอีกด้วย

การปฏิบัติง่ายๆ

รูปแบบจำนวนเต็ม:

  • "/*/"

เป็นรูปแบบจำนวนเต็มด้วย แต่อาจมีเครื่องหมายอยู่ข้างหน้า ("+", "-") และอาจมีช่องว่างเพิ่มเติมที่ด้านหน้า/ด้านหลัง:

  • /^[\s|\+|\-](0,1)*/

เช่นเดียวกัน:

  • /^[\s|\+|\-](0,1)*(\.)*/ - ตัวเลขที่มีจุด
  • /+@+\.(2,3)/ - ตัวเลือกสำหรับการจดจำอีเมล

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

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

int preg_match_all (รูปแบบสตริง, หัวเรื่องสตริง, อาร์เรย์ &ตรงกัน [, int flags [, int offset]])

ค้นหาหัวเรื่องสตริงสำหรับการจับคู่ทั้งหมดของรูปแบบรูปแบบ และวางผลลัพธ์ในอาร์เรย์ที่ตรงกันตามลำดับที่กำหนดโดยการรวมกันของแฟล็ก

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

พารามิเตอร์สถานะทางเลือกสามารถรวมค่าต่อไปนี้ได้ (โปรดทราบว่าการใช้ PREG_PATTERN_ORDER ในเวลาเดียวกันกับ PREG_SET_ORDER นั้นไม่มีความหมาย):

PREG_PATTERN_ORDER

หากตั้งค่าแฟล็กนี้ ผลลัพธ์จะถูกเรียงลำดับดังนี้: องค์ประกอบ $matches มีอาร์เรย์ของรูปแบบที่สมบูรณ์ องค์ประกอบ $matches มีอาร์เรย์ของรูปแบบย่อยแรกที่เกิดขึ้น เป็นต้น

ส่งกลับจำนวนครั้งของรูปแบบที่พบ (อาจเป็นศูนย์) หรือ FALSE หากเกิดข้อผิดพลาดใดๆ ระหว่างการดำเนินการ


ตัวอย่างที่ 2: การจับคู่แท็ก HTML อย่างโลภ

ผลลัพธ์ของตัวอย่างนี้จะเป็น:

หากพบการจับคู่รูปแบบระหว่างการทำงานของฟังก์ชัน ค่าหัวเรื่องที่แก้ไขจะถูกส่งคืน มิฉะนั้นหัวเรื่องดั้งเดิมจะถูกส่งคืน

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

หมีดำกระโดดข้ามสุนัขขี้เกียจอย่างช้าๆ

การใช้ ksort() เราจะได้ผลลัพธ์ที่ต้องการ:

หมีดำที่เชื่องช้ากระโดดข้ามสุนัขขี้เกียจ

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

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

โมดิฟายเออร์ /e จะเปลี่ยนพฤติกรรมของฟังก์ชัน preg_replace() ในลักษณะที่พารามิเตอร์การแทนที่ หลังจากดำเนินการแทนที่ที่จำเป็นแล้ว จะถูกตีความว่าเป็นโค้ด PHP จากนั้นจึงใช้สำหรับการแทนที่เท่านั้น เมื่อใช้ตัวแก้ไขนี้ โปรดระวัง: พารามิเตอร์การแทนที่ต้องมีโค้ด PHP ที่ถูกต้อง มิฉะนั้นจะเกิดข้อผิดพลาดทางไวยากรณ์ในบรรทัดที่มีการเรียกฟังก์ชัน preg_replace()

โค้ดตัวอย่าง: แทนที่ด้วยหลายรูปแบบ

ตัวอย่างนี้จะแสดงผล:

$startDate = "27/05/1999";

โค้ดตัวอย่าง: การใช้ตัวแก้ไข /e โค้ดตัวอย่าง: แปลงแท็ก HTML ทั้งหมดเป็นตัวพิมพ์ใหญ่ preg_replace_callback

ฟังก์ชัน preg_replace_callback - ทำการค้นหาและแทนที่นิพจน์ทั่วไปโดยใช้ฟังก์ชันโทรกลับ

ไวยากรณ์

ผสม preg_replace_callback (รูปแบบผสม, การโทรกลับ, วิชาผสม [, ขีดจำกัด int])

ลักษณะการทำงานของฟังก์ชันนี้มีหลายวิธีคล้ายกับ preg_replace() ยกเว้นว่าแทนที่จะระบุพารามิเตอร์การแทนที่ คุณต้องระบุฟังก์ชันเรียกกลับ ซึ่งจะถูกส่งผ่านอาร์เรย์ของเหตุการณ์ที่พบเป็นพารามิเตอร์อินพุต ผลลัพธ์ที่คาดหวังคือสตริงที่จะถูกแทนที่

รหัสตัวอย่าง