ในทางตรงกันข้าม. ผู้คนกำลังจดจ่อกับregex เป็นวิธีการที่ชั่วร้ายบ่อยครั้งที่ IMO เห็นได้ชัดว่า preg_match มีการใช้งานมากเกินไปphp
แต่ก็ไม่ค่อยมีความชัดเจนที่จะทำเช่นนั้น (ใน PHP)
ฉันจะไปไกลและคาดเดาว่ามันเป็น microoptimization อื่นใน php land เพื่อใช้ฟังก์ชั่นสตริง มีประโยชน์มากมายหลายอย่างและพวกมันมักเป็นตัวเลือกที่ดีกว่า แต่คุณไม่ควรหลีกเลี่ยงpreg_match
ความโปรดปรานของหลาย ๆstrpos
และif
โซ่ เพราะในทางปฏิบัติมันกลับกลายเป็นว่า libpcre มักจะเร็วกว่า PHP ที่สามารถรันลูปเพื่อค้นหาทางเลือกของสตริงเช่น
เป็นตัวอย่างล่าสุดทำให้ฉันตระหนักถึงการทดสอบว่าสตริงเป็นตัวพิมพ์เล็กทั้งหมด:
if ($string == strtolower($string))
อ่านง่ายกว่า:
if (!preg_match("/[A-Z]/", $string))
และคุณจะคิดว่าคนแรกจะต้องเร็วกว่าเพราะมันคือ PHP ทั้งหมด แต่ในความเป็นจริงแล้ว regex จะมองผ่านสายอักขระเพียงครั้งเดียวเท่านั้นและสามารถยกเลิกเงื่อนไขที่ถูกทอดทิ้งได้ทันทีที่พบตัวอักษรตัวพิมพ์ใหญ่ strtolower () วิธีการ แต่มองไปที่สตริงสองครั้ง First strtolower () ทำสตริงที่ซ้ำกันโดยวนซ้ำตัวอักษรแต่ละตัวเปรียบเทียบและตัวพิมพ์ใหญ่ จากนั้น==
จะวนซ้ำไปตามต้นฉบับและสำเนาอีกครั้งเปรียบเทียบพวกเขาอีกครั้ง
นั่นไม่ใช่กรณีที่ชัดเจน และเพื่อให้เป็นไปตามวัตถุประสงค์คนแรกมักจะเร็วกว่าเนื่องจากคุณเพียงแค่เปรียบเทียบสตริงสั้น ๆ แต่มีความจำเป็นที่จะไม่ต้องสุ่มสี่สุ่มห้าโดยการสันนิษฐานว่าฟังก์ชั่นสตริงของ PHP นั้นแนะนำให้ใช้กับนิพจน์ทั่วไปเสมอ
(ฉันถูกล่อลวงให้เพิ่มคำพูดสนุก ๆเกี่ยวกับคำตอบที่สนุกของ @ bobinceเกี่ยวกับ xhtml-regexes และบ่อยครั้งที่มันมักจะเชื่อมโยงกันในลักษณะที่ไม่ช่วยเหลือมากและคำตอบที่มีวัตถุประสงค์ด้านล่างก็ไม่สนใจ)