นิพจน์ทั่วไปเป็นเครื่องมือที่มีประโยชน์มากสำหรับนักพัฒนา นิพจน์ทั่วไปช่วยให้คุณตรวจสอบ ค้นหา และแก้ไขข้อความเพื่อความถูกต้องได้
บทความนี้มีสำนวนที่มีประโยชน์มากซึ่งคุณมักจะต้องใช้
รู้เบื้องต้นเกี่ยวกับนิพจน์ทั่วไป
เมื่อนำมาใช้กับนิพจน์ทั่วไปเป็นครั้งแรก อาจดูเหมือนเป็นการยากที่จะเข้าใจและใช้งาน ในความเป็นจริงทุกอย่างง่ายกว่าที่คิด ก่อนที่เราจะดูตัวอย่างที่ซับซ้อน เรามาดูข้อมูลพื้นฐานกันก่อน:
ฟังก์ชั่นสำหรับการทำงานกับนิพจน์ทั่วไปใน PHP
การยืนยันโดเมน
กำลังตรวจสอบชื่อโดเมนที่ถูกต้อง
$url = "http://example.com/"; if (preg_match("/^(http|https|ftp)://(*(?:.*)+):?(d+)?/?/i", $url)) ( echo "ตกลง"; ) อื่น ๆ ( echo "URL ผิด"; )
การเน้นคำในข้อความ
นิพจน์ทั่วไปที่มีประโยชน์มากสำหรับ . มีประโยชน์ในการค้นหา
$text = "ประโยคตัวอย่าง regex ได้รับความนิยมในการเขียนโปรแกรมเว็บ ตอนนี้เราเรียนรู้ regex ตามวิกิพีเดีย นิพจน์ทั่วไป (ตัวย่อว่า regex หรือ regexp โดยมีรูปแบบพหูพจน์ regexes, regexps หรือ regexen) เขียนด้วยภาษาทางการที่ สามารถตีความได้โดยตัวประมวลผลนิพจน์ทั่วไป"; $text = preg_replace("/b(regex)b/i", " 1", $ข้อความ); เสียงสะท้อน $ข้อความ;
ผลการค้นหาที่เน้นใน WordPress
ตามที่ได้กล่าวไปแล้ว ตัวอย่างก่อนหน้านี้มีประโยชน์มากสำหรับ . มานำไปใช้กับ WordPress กันเถอะ เปิดไฟล์ ค้นหา.php,ค้นหาฟังก์ชัน the_title()แทนที่ด้วยสิ่งต่อไปนี้:
เสียงสะท้อน $title;
ก่อนบรรทัดนี้ ให้ใส่โค้ด:
\0", $title); ?>
เปิดไฟล์ สไตล์.css- เพิ่มบรรทัดเข้าไป:
Strong.search-ข้อความที่ตัดตอนมา ( พื้นหลัง: สีเหลือง; )
รับภาพทั้งหมดจากเอกสาร HTML
หากคุณต้องการค้นหารูปภาพทั้งหมดในหน้า HTML โค้ดต่อไปนี้จะมีประโยชน์มาก ด้วยเครื่องมือนี้ คุณสามารถสร้างโปรแกรมอัพโหลดรูปภาพได้อย่างง่ายดายโดยใช้ไฟล์ .
$images = array(); preg_match_all("/(img|src)=("|")[^"">]+/i", $data, $media); ไม่ได้ตั้งค่า($ข้อมูล); $data=preg_replace("/(img|src)("|"|="|=")(.*)/i","$3",$media); foreach($data as $url) ( $info = pathinfo($url); if (isset($info["extension"])) ( if (($info["extension"] == "jpg") || ($ข้อมูล["ส่วนขยาย"] == "jpeg") ||. ($ข้อมูล ["ส่วนขยาย"] == "gif") ||. ($ข้อมูล ["ส่วนขยาย"] == "png")) array_push($ รูปภาพ, $url);
การลบคำที่ซ้ำกัน (ไม่ขึ้นกับตัวพิมพ์เล็กและใหญ่)
$text = preg_replace("/s(w+s)1/i", "$1", $text);การลบเครื่องหมายวรรคตอนที่ซ้ำกัน
คล้ายกับอันก่อนหน้า แต่ลบเครื่องหมายวรรคตอนออก
$text = preg_replace("/.+/i", ".", $text);
ค้นหาแท็ก XML/HTML
ฟังก์ชันง่ายๆ ที่รับสองอาร์กิวเมนต์: แท็กที่จะพบและสตริงที่มี XML หรือ HTML
ฟังก์ชั่น get_tag($tag, $xml) ( $tag = preg_quote($tag); preg_match_all("(<".$tag."[^>]*>(.*?)".$tag.">")", $xml, $matches, PREG_PATTERN_ORDER);
ส่งคืนการแข่งขัน $;
ค้นหาแท็ก XML/HTML ที่มีค่าแอตทริบิวต์เฉพาะ ฟังก์ชันนี้คล้ายกับฟังก์ชันก่อนหน้า แต่สามารถระบุแอตทริบิวต์ของแท็กได้ ตัวอย่างเช่น:<(".$tag.")[^>ฟังก์ชั่น get_tag($attr, $value, $xml, $tag=null) ( if(is_null($tag)) $tag = "\w+"; else $tag = preg_quote($tag); $attr = preg_quote($ attr); $value = preg_quote($value); $tag_regex = "/<\/\\1>]*$attr\s*=\s*". "(["\"])$value\\2[^>]*>(.*?) ค้นหารหัสสี Hex ฟังก์ชั่นนี้ช่วยให้คุณค้นหาหรือตรวจสอบความถูกต้องของรหัสสีเลขฐานสิบหก การค้นหาชื่อหน้า หน้า HTML กำลังแยกวิเคราะห์บันทึก Apache เว็บไซต์หลายแห่งทำงานบนเว็บเซิร์ฟเวอร์ Apache หากไซต์ของคุณทำงานบนเซิร์ฟเวอร์ทาโก้ กิจวัตรประจำวันต่อไปนี้อาจเป็นประโยชน์ นิพจน์ทั่วไปนี้จะตรวจสอบสตริงทีละจุด: สตริงต้องมีตัวอักษร ตัวเลข ขีดล่าง และขีดกลางอย่างน้อย 6 ตัว บรรทัดจะต้องมีอักษรตัวพิมพ์ใหญ่ ตัวพิมพ์เล็ก และตัวเลขอย่างน้อยหนึ่งตัว "A(?=[-_a-zA-Z0-9]*?)(?=[-_a-zA-Z0-9]*?)(?=[-_a-zA-Z0-9]*?) [-_a-zA-Z0-9](6,)z" หากคุณใช้ WordPress คุณอาจพบว่าการมีฟีเจอร์ที่จะดึงรูปภาพทั้งหมดจากโพสต์มาแสดงนั้นมีประโยชน์ หากต้องการใช้โค้ดนี้ ให้คัดลอกลงในไฟล์ธีมของคุณ
post_content; $szSearchPattern = "~ ]* />~"; // เรียกใช้ preg_match_all เพื่อดึงภาพทั้งหมดและบันทึกผลลัพธ์ใน $aPics preg_match_all($szSearchPattern, $szPostContent, $aPics); // ตรวจสอบว่าเรามีรูปภาพอย่างน้อย 1 ภาพหรือไม่ $iNumberOfPics = count($aPics); if ($iNumberOfPics > 0) ( // ทีนี้ คุณจะทำทุกอย่างที่ต้องทำกับรูปภาพ // สำหรับตัวอย่างนี้ รูปภาพจะถูกแสดงเพียง ($i=0; $i< $iNumberOfPics ; $i++) {
echo $aPics[$i];
};
};
endwhile;
endif;
?>
คุณลักษณะนี้ยังมีอยู่ใน WordPress ซึ่งช่วยให้คุณสามารถแทนที่อิโมติคอนข้อความด้วยรูปภาพได้โดยอัตโนมัติ $texte="ข้อความที่มีสไมลี่:-)"; เสียงสะท้อน str_replace(":-)" ",$ข้อความ); เรามาเริ่มกันด้วยว่านิพจน์ทั่วไปคืออะไร ดังนั้นตอบคำถามนี้กับฉัน: มี "e" ในคำว่า "ทดสอบ" หรือไม่? "กิน!" คุณพูด ถ้าอย่างนั้น ฉันถามคำถามที่สองกับคุณ คุณพบตัวอักษร "e" ในคำว่า "ทดสอบ" ได้อย่างไร? คำตอบนั้นชัดเจน เราใช้อักขระตัวแรกนั่นคือ "t" แล้วเปรียบเทียบกับสิ่งที่เรากำลังมองหานั่นคือด้วย "e" หากไม่เท่ากันเราจะนำอักขระตัวที่สองซึ่งก็คือ "e" และเปรียบเทียบกับสิ่งที่เรากำลังมองหานั่นคือ "e" เอาล่ะ! พบการแข่งขัน คำตอบ: คำว่า "ทดสอบ" มีตัวอักษร "e". ทีนี้ ตอบฉันอีกหนึ่งคำถาม นิพจน์ทั่วไปในตัวอย่างนี้อยู่ที่ไหน? ฉันหวังว่าคุณจะเดาได้ว่านิพจน์ทั่วไปที่นี่คือสิ่งที่เรากำลังมองหาในคำว่า "ทดสอบ" นั่นคือตัวอักษร "e" ในตัวอย่างนี้เป็นนิพจน์ทั่วไป นิพจน์ทั่วไปใช้ใน PHP คืออะไร? ในทางปฏิบัติของฉัน มีการใช้นิพจน์ทั่วไปเพื่อพิจารณาว่าที่อยู่อีเมลถูกสร้างขึ้นอย่างถูกต้องหรือไม่ สำนวนดังกล่าวยังใช้เพื่อกำหนดความถูกต้องของชื่อผู้ใช้และรหัสผ่าน เมื่อใช้นิพจน์ทั่วไป คุณสามารถค้นหาที่อยู่ในลิงก์และบันทึกได้ มีหลายสิ่งที่คุณสามารถทำได้ ด้วยการวิเคราะห์สิ่งนี้ คุณสามารถระบุฟังก์ชันหลักของนิพจน์ทั่วไปและฟังก์ชันสองด้านได้ ฟังก์ชั่นหลักนี่คือการค้นหารายการที่ตรงกันในสตริง ผลข้างเคียงรวมถึงการบันทึกการแข่งขันที่พบและแทนที่ ตามทฤษฎีแล้ว เราเข้าใจวิธีการค้นหาอักขระ "e" ในคำว่า "ทดสอบ" แต่จะนำไปใช้ในทางปฏิบัติได้อย่างไร หากต้องการใช้นิพจน์ทั่วไปใน php โดยปกติจะใช้ฟังก์ชันต่อไปนี้: preg_match("นิพจน์ปกติ (รูปแบบ)", "ตัวแปรที่ใช้ค้นหา", "ตัวแปรที่บันทึกผลการค้นหา (พารามิเตอร์ทางเลือก)"); - ฟังก์ชั่นการจับคู่ เรามาเริ่มใช้ฟังก์ชันเหล่านี้กันดีกว่า นี่คือตัวอย่างการค้นหาอักขระ "e" ในคำว่า "test": $a = "ทดสอบ"; โค้ดอธิบายเงื่อนไข: หากพบสิ่งที่ตรงกับรูปแบบในตัวแปร $a ให้แสดงข้อความ “found!!” ดังที่คุณอาจสังเกตเห็นแล้ว เทมเพลตของเราตั้งอยู่ระหว่าง "/" สองอัน ในกรณีนี้คือสัญลักษณ์ "/" เป็นสัญลักษณ์ของจุดเริ่มต้นและจุดสิ้นสุดของรูปแบบของเรา- ฉันหวังว่านี่จะชัดเจน แน่นอนว่าทั้งหมดนี้น่าสนใจ... แต่เทมเพลตของเรานั้นเรียบง่ายมาก คุณว่ามั้ย? ท้ายที่สุดแล้ว เราแทบไม่ต้องค้นหาสัญลักษณ์บางตัวในตัวแปรเลย ในกรณีส่วนใหญ่ เราจำเป็นต้องค้นหาตัวละครหลายตัวและตัวละครที่ไม่รู้จักด้วย เป็นไปได้ยังไง? เรามาตั้งปัญหากับตัวเองและพยายามแก้ไขมัน สมมติว่าเรามีสตริงที่ประกอบด้วยตัวเลขและตัวอักษรภาษาอังกฤษตัวหนึ่งที่ไม่รู้จัก จะหาจดหมายฉบับนี้ได้อย่างไร? อาจมีตัวอักษรภาษาอังกฤษอยู่ด้วย คุณจะระบุได้อย่างไร? คุณตอบคำถามของคุณเองมีตัวอักษรใด ๆ นั่นคืออยู่ในช่วงตั้งแต่ a ถึง z คุณสามารถใช้ช่วงในนิพจน์ทั่วไปได้ หากเราไม่รู้ว่าเรากำลังมองหาตัวละครตัวไหน แต่เรารู้แน่ว่าตัวละครตัวนี้เป็นตัวอักษรภาษาอังกฤษ รายการจะเป็นดังนี้: $a = "123a321"; โปรดทราบว่าช่วงจะอยู่ในวงเล็บ "[" "]" ทุกสิ่งที่อยู่ในวงเล็บดังกล่าวถูกกำหนดให้เป็น หนึ่งสัญลักษณ์ ในกรณีนี้ สัญลักษณ์มีตั้งแต่ a ถึง z หากเราจำเป็นต้องค้นหาไม่ใช่ตัวอักษร แต่เป็นตัวเลข รายการจะเป็นดังนี้: $a = "abc1cba"; ฉันยังต้องการทราบด้วยว่านิพจน์ทั่วไปคำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ ดังนั้นอักขระ "A" และ "a" จึงแตกต่างกันโดยสิ้นเชิง หากต้องการค้นหาอักขระทั้งสองให้เขียนดังนี้: $a = "123a321"; นอกจากนี้ยังมีการค้นหาตัวอักษรรัสเซียซึ่งดำเนินการในลักษณะเดียวกับตัวอักษรภาษาอังกฤษ: $a = "123×321"; เราเรียนรู้วิธีค้นหาอักขระที่ไม่รู้จักในสตริง จะทำอย่างไรถ้าเราต้องหาตัวละครหลายตัว? สิ่งที่เรียกว่าเมตาสัญลักษณ์มาช่วย... สมมติว่าเรามีสตริงที่มีตัวเลขและตัวอักษร เราจะอธิบายในเทมเพลตได้อย่างไร? คุณสามารถทำได้: บรรทัด - 123a321 อืม... เทมเพลตตรงกับสตริงของเราจริงๆ และเมื่อตรวจสอบการปฏิบัติตามข้อกำหนดแล้ว ก็จะถือว่าเป็นจริงที่รอคอยมานาน! แต่มันเป็นอัลบั้มที่ค่อนข้างยุ่งยากนะคุณว่าไหม? วิธีย่อให้สั้นลงมีดังนี้ บรรทัด - 123a321 สำหรับฉันดูเหมือนว่ามันสั้นกว่า สัญลักษณ์ “*” คืออะไร? นี่เป็นสัญลักษณ์เมตาเดียวกัน หมายความว่าสัญลักษณ์ที่เราอธิบายไว้ (กล่าวคือ สัญลักษณ์ที่สามารถมีตัวเลขตั้งแต่ 0 ถึง 9 หรือตัวอักษรภาษาอังกฤษตั้งแต่ a ถึง z) สามารถทำซ้ำได้อย่างไม่มีกำหนด หรือมากกว่าหนึ่งครั้ง ใช่แล้ว! สัญลักษณ์เมตานี้จะค้นหาการจับคู่ในตัวแปรว่าง เนื่องจากแม้ไม่มีสัญลักษณ์ที่เราอธิบายไว้ก็จะคืนค่าเป็นจริง! จำสิ่งนี้ไว้
มีอักขระเมตาอื่นใดอีกบ้าง? ตัวอย่างเช่น เมตาอักขระ "+" เกือบจะคล้ายกับเมตาอักขระ "*" โดยมีข้อยกเว้นเล็กๆ น้อยๆ ประการหนึ่ง "*" จะคืนค่าเป็นจริงแม้ว่าจะไม่มีอักขระก็ตาม และ "+" จะตรวจสอบว่ามีอักขระอย่างน้อยหนึ่งตัวหรือไม่ นั่นคือถ้าบรรทัดจำเป็นต้องมีการแสดงตน ขั้นต่ำอักขระหนึ่งตัวจากนั้นใช้ "+" แทน "*" อักขระเมตา "?" ก็มักใช้เช่นกัน หมายความว่าบรรทัดจะต้องมีอักขระที่ต้องการไม่เกินหนึ่งตัว ฉันขอยกตัวอย่างสองสามตัวอย่างสำหรับอักขระเมตาสองตัวสุดท้ายที่ฉันอธิบาย สมมติว่าเราต้องตรวจสอบรหัสผ่านของผู้ใช้เพื่อความถูกต้อง ลองคิดดูว่ารหัสผ่านผู้ใช้ควรมีอะไรบ้าง? ก่อนอื่นจะต้องมีอักขระอย่างน้อยหนึ่งตัว ประการที่สอง จะต้องประกอบด้วยตัวเลขและตัวอักษรภาษาอังกฤษเท่านั้น ดังนั้นนิพจน์ทั่วไปจะมีลักษณะดังนี้: $a = "qwerty12345"; เราอนุญาตให้มีอักขระอะไรบ้าง ตัวอักษรภาษาอังกฤษทุกกรณีและตัวเลข ตอนนี้ให้ลองเว้นบรรทัดว่างแทนรหัสผ่าน $a = ""; คุณจะไม่เห็นข้อความ "รหัสผ่านถูกต้อง" ทำไม เนื่องจากอักขระเมตา "+" ตรวจสอบสตริงเพื่อดูว่ามีอักขระอย่างน้อยหนึ่งตัวหรือไม่ ทีนี้เคล็ดลับเล็กๆ น้อยๆ ลองดูที่นิพจน์ของเรา เราไม่อนุญาตให้ เอาล่ะ สมมุติว่ามีการเว้นวรรคในนั้น จริงไหม? ใส่ช่องว่างท้ายรหัสผ่านแล้วเรียกใช้ $a = "qwerty12345"; และเหตุใดเราจึงเห็นข้อความของเราเกี่ยวกับรหัสผ่านที่ถูกต้อง มันค่อนข้างง่าย... ฟังก์ชั่น preg_match(); หยุดการตรวจสอบในนัดแรก นั่นคือสัญลักษณ์ "q" ตรงกับรูปแบบที่เราอธิบายไว้ และอย่างอื่นไม่สำคัญสำหรับฟังก์ชันอีกต่อไป เราควรทำอย่างไร? ต่อไปนี้เป็นวิธีแก้ไข: $a = "qwerty12345"; โดยการเพิ่ม "^" ที่จุดเริ่มต้นของนิพจน์และ "$" ที่ท้าย เราจะบอกฟังก์ชันว่ารูปแบบควรตรงกับอะไร ทั้งหมดเส้น. หากคุณเรียกใช้รหัสนี้ คุณจะไม่เห็นข้อความ เนื่องจากมีอักขระที่ผิดกฎหมายอยู่ท้ายรหัสผ่าน - ช่องว่าง ตอนนี้เปลี่ยนเมตาอักขระ "+" เป็นเมตาอักขระ "?" คุณคิดว่าจะเกิดอะไรขึ้น? อย่างถูกต้องจะไม่มีข้อความเกี่ยวกับความถูกต้องของรหัสผ่านเนื่องจากรหัสผ่านมีอักขระมากกว่าหนึ่งตัว ฉันหวังว่าฉันจะอธิบายการทำงานของ meta character ที่ใช้บ่อยทั้งสามนี้ได้อย่างถูกต้อง อย่างน้อยเราก็ได้เรียนรู้วิธีตรวจสอบรหัสผ่านให้ถูกต้องแล้ว ซึ่งนั่นก็ดี! ฉันจะบอกคุณเกี่ยวกับวิธีอื่นในการค้นหาบางสิ่งในสตริง สมมติว่าเราต้องตรวจสอบว่าไม่มีตัวเลขในสตริงหรือไม่ วิธีการทำเช่นนี้? นี่คือบรรทัด: (ผมใส่สัญลักษณ์ “-_+()” เหล่านี้ลงไปโดยเฉพาะ เพื่อชีวิตจะได้ไม่ดูหวานชื่น...) เราสามารถกำหนดนิพจน์ต่อไปนี้: แต่คุณต้องยอมรับ เราไม่รู้เสมอไปว่ามีการใช้อักขระตัวไหนในบรรทัด แต่เรารู้แน่ว่าไม่ควรมีตัวเลขอยู่ในนั้น! ดังนั้นจึงมีเหตุผลมากกว่าที่จะเขียนเทมเพลตที่จะข้ามบรรทัดไป เลขที่ตัวเลขและไม่ใช่ที่มีอยู่ “โอ้พระเจ้า มีสัญลักษณ์ที่เข้าใจยากมากมายขนาดนี้!!!”- นี่คือตัวอย่างของนิพจน์ที่เรียบเรียงอย่างถูกต้องสำหรับปัญหาดังกล่าว: $a = "a-_+()"; เราบรรลุเป้าหมายนี้ได้อย่างไร? เราเข้าสัญลักษณ์แล้ว แต่!อักษรตัวพิมพ์ใหญ่ "^" ([^0-9]) วางไว้ที่จุดเริ่มต้นแสดงว่าจะมี ไม่ควรฉันหวังว่าสิ่งนี้จะได้รับการแก้ไข เอาล่ะ มาสรุปช้าๆ กัน... ฉันจะให้สองตัวอย่างพร้อมคำอธิบาย ในระหว่างนี้เราจะเรียนรู้วิธีบันทึกผลการค้นหาลงในตัวแปร และเรียนรู้วิธีตรวจสอบความถูกต้องของที่อยู่ไปรษณีย์ บล็อกของฉัน $a = " บล็อกของฉัน"; ในนิพจน์ทั่วไปของเรา เราได้อธิบายอักขระที่เป็นไปได้ทั้งหมดที่สามารถรวมไว้ในลิงก์ได้ ฉันยังต้องการใส่ใจกับเครื่องหมายคำพูดและอักขระ “/” ในนิพจน์ของเราด้วย โดยจะมีเครื่องหมายแบ็กสแลชนำหน้าด้วย มีไว้เพื่ออะไร ความจริงก็คือ "/" และเครื่องหมายคำพูดนั้นเป็นอักขระพิเศษ และเพื่อให้เทมเพลตรับรู้ว่าเป็นสัญลักษณ์ธรรมดา เราจำเป็นต้องคัดกรองพวกมัน Escape ทำได้โดยการเพิ่มเครื่องหมายแบ็กสแลชหน้าอักขระพิเศษ ฉันหวังว่ามันจะชัดเจน $a = " บล็อกของฉัน"; ดังนั้นจึงจำเป็นต้องเพิ่มพารามิเตอร์เพิ่มเติมในรูปแบบของตัวแปร $b ซึ่งลิงก์ที่พบจะถูกจัดเก็บ คุณต้องรู้ด้วยว่าผลการค้นหานั้นอยู่ในอาร์เรย์ ดังนั้นตัวแปร $b จึงเป็นอาร์เรย์ ข้อมูลที่เราค้นหาอยู่ภายใต้ดัชนี 1 ซึ่งหมายความว่าผลการค้นหาอยู่ในตัวแปร $b มาแสดงผลบนหน้าจอกัน: $a = " บล็อกของฉัน"; และสุดท้ายคำตอบของคำถามคืออีเมลถูกต้องหรือไม่? ขั้นแรก คุณต้องค้นหาว่าอักขระใดบ้างที่ได้รับอนุญาตในที่อยู่ เท่าที่ฉันรู้ อักขระที่อนุญาตได้แก่: ดังนั้นนิพจน์ทั่วไปจะเป็นดังนี้: $a = " [ป้องกันอีเมล]"; เอาล่ะ... ฉันหวังว่าบันทึกดังกล่าวจะไม่ทำให้คุณกลัวในตอนนี้ และคุณก็สามารถเข้าใจมันได้แล้ว สุดท้ายนี้ฉันอยากจะพูดอะไรสักอย่าง บทความนี้กลายเป็นเรื่องยุ่งยากและในขณะเดียวกันก็ครอบคลุมความเป็นไปได้เพียงบางส่วนเท่านั้น หากคุณกำลังอ่านประโยคนี้ เป็นไปได้มากว่าคุณจะได้อ่านมันจนจบ ซึ่งขอขอบคุณมาก เกี่ยวกับชุดบทความเกี่ยวกับการพัฒนาบล็อก cms ส่วนแรกของซีรีส์ ฉันประกาศปิดแล้ว!ในอนาคตอันใกล้นี้ เราจะเริ่มใช้งานแผงผู้ดูแลระบบ ดังนั้นอย่า "เปลี่ยน" หากคุณมีคำถามใดๆ เรายินดีที่จะตอบ สิ่งที่ดีที่สุดสำหรับคุณนั่นคือทั้งหมดจากฉัน! ค้นหาหัวเรื่องข้อความที่กำหนดเพื่อให้ตรงกับรูปแบบลวดลาย หากมีการระบุพารามิเตอร์การจับคู่เพิ่มเติม จะมีการเติมผลการค้นหา องค์ประกอบ $matches จะมีส่วนของสตริงที่ตรงกับรูปแบบทั้งหมด ส่วน $matches จะมีส่วนของสตริงที่ตรงกับรูปแบบย่อยแรก และอื่นๆ ธงสามารถรับค่าต่อไปนี้: PREG_OFFSET_CAPTURE หากระบุแฟล็กนี้ สำหรับแต่ละสตริงย่อยที่พบ ตำแหน่งในสตริงต้นทางจะถูกระบุ สิ่งสำคัญคือต้องจำไว้ว่าแฟล็กนี้เปลี่ยนรูปแบบของข้อมูลที่ส่งคืน: แต่ละเหตุการณ์จะถูกส่งกลับเป็นอาร์เรย์ องค์ประกอบที่ศูนย์ประกอบด้วยสตริงย่อยที่พบ และองค์ประกอบแรกประกอบด้วยออฟเซ็ต การตั้งค่าสถานะนี้มีให้ใช้งานใน PHP 4.3.0 และสูงกว่า พารามิเตอร์แฟล็กเพิ่มเติมมีให้ใช้งานตั้งแต่ PHP 4.3.0 ค้นหาจากซ้ายไปขวาตั้งแต่ต้นบรรทัด สามารถใช้พารามิเตอร์ออฟเซ็ตเผื่อเลือกเพื่อระบุตำแหน่งเริ่มต้นสำรองสำหรับการค้นหาได้ พารามิเตอร์ออฟเซ็ตเพิ่มเติมมีให้ใช้งานตั้งแต่ PHP 4.3.3ความคิดเห็น: การใช้พารามิเตอร์ offset ไม่เทียบเท่ากับการแทนที่สตริงที่ตรงกันด้วย substr($subject, $offset) เมื่อเรียกใช้ฟังก์ชัน preg_match_all() ^
, $
เนื่องจากรูปแบบอาจมีเงื่อนไขเช่น (?
หรือ - เปรียบเทียบ: ในขณะที่ตัวอย่างนี้ การทำงาน preg_match() การทำงานส่งคืนจำนวนรายการที่ตรงกันที่พบ การใช้พารามิเตอร์ offset ไม่เทียบเท่ากับการแทนที่สตริงที่ตรงกันด้วย substr($subject, $offset) เมื่อเรียกใช้ฟังก์ชันอาจเป็น 0 (ไม่พบรายการที่ตรงกัน) และ 1 เพราะ การทำงานหยุดทำงานหลังจากพบนัดแรก หากคุณต้องการค้นหาหรือนับรายการที่ตรงกันทั้งหมด คุณควรใช้ฟังก์ชัน - การทำงานผลตอบแทน เท็จในกรณีที่มีข้อผิดพลาดเกิดขึ้นระหว่างการดำเนินการ การทำงานเบาะแส: อย่าใช้ฟังก์ชันหากคุณต้องการตรวจสอบว่ามีสตริงย่อยอยู่ในสตริงที่กำหนดหรือไม่ ใช้สำหรับสิ่งนี้สตรอส() หรือ "ไม่พบรายการ" อย่างน้อยในบทเรียนก่อนหน้านี้เราใช้มัน แม่นยำยิ่งขึ้น แทนที่จะเป็น preg_match มี preg_match_all แต่โดยพื้นฐานแล้วนี่คือสิ่งเดียวกัน เฉพาะอย่างหลังเท่านั้นที่ไม่ขัดจังหวะการค้นหาหลังจากการค้นพบครั้งแรก นั่นคือหากเราใช้ preg_match เราจะไม่พบรายการทั้งหมด แต่จะพบเฉพาะรายการแรกเท่านั้น การเลือกฟังก์ชันที่จะใช้ในสถานการณ์ใดก็ค่อนข้างง่าย เราจำเป็นต้องแทนที่ - เราใช้การแทนที่ เช่นในกรณีที่เราต้องการลบส่วนที่ไม่จำเป็นของโค้ดเพจ จำได้ไหม? $page = preg_replace("/ ^]/i", "", $page); $page = preg_replace("/ พารามิเตอร์แรกของฟังก์ชันคืออักขระปกติที่กำหนดสิ่งที่เรากำลังมองหา อย่างที่สองคือสิ่งที่เราแทนที่ด้วย ประการที่สาม - เรากำลังมองหาที่ไหน? ดังนั้นเราจึงนำตัวแปร $page และกำหนดผลลัพธ์ของฟังก์ชัน preg_replace ให้กับตัวแปรที่เราค้นหา input type=checkbox ทั้งหมด รวมถึงป้ายกำกับการเปิดและปิด พวกเขาแทนที่ด้วย "นั่นคือพวกเขาเพียงแค่ลบออก ฉันหวังว่าทุกอย่างชัดเจนที่นี่ เราจะวิเคราะห์นิพจน์เอง (พารามิเตอร์แรกของฟังก์ชัน) ในภายหลังเล็กน้อย Preg_match_all("/ ]+?>(.*?)<\/a>/uis",$page,$ok); สำหรับ ($j=0; $j พารามิเตอร์แรกเป็นนิพจน์ทั่วไปอีกครั้งเพื่อค้นหาลิงก์ทั้งหมดที่อยู่ในแท็ก "a" ตามธรรมชาติ (หากคุณไม่คุ้นเคยกับมาร์กอัป html ให้อ่าน) ประการที่สองคือตัวแปรที่มีข้อความที่จะค้นหา พารามิเตอร์ตัวที่สามคือตัวแปรซึ่งวางผลลัพธ์ไว้ - $ok หลังจากนี้ สิ่งที่เหลืออยู่คือต้องผ่านองค์ประกอบที่จำเป็นทั้งหมดของ $ok เพื่อให้ได้คีย์ที่เราต้องการ ควรแยกจากกันว่าที่เอาต์พุตเราได้รับอาเรย์หลายมิติ นั่นคือเหตุผลที่เราแสดงมันด้วยวิธีที่ซับซ้อน: $ok[$j] หากต้องการดูโครงสร้างของอาร์เรย์ ให้ใช้ฟังก์ชันด้านล่างแล้วคุณจะเข้าใจทุกอย่าง Print_r($ตกลง); ดูเหมือนว่าเราได้แยกแยะฟังก์ชั่นที่เราใช้สำหรับงานของเราแล้ว ตอนนี้สิ่งที่เหลืออยู่คือการเรียนรู้วิธีเขียนนิพจน์ทั่วไปที่เหมือนกันซึ่งเป็นพารามิเตอร์แรกของแต่ละวิธีเหล่านี้ เรามาดูสิ่งที่สำคัญที่สุดกันดีกว่า ก่อนอื่นเรามาดูโครงสร้างพื้นฐานกันก่อน นิพจน์มีตัวเลือก ระบุด้วยตัวอักษรตัวเดียวและเขียนต่อท้าย นำหน้าด้วยเครื่องหมายทับ นอกจากนี้ ยังรองรับอักขระเมตาต่อไปนี้:
/^]/i เครื่องหมายทับตัวแรกและตัวสุดท้าย “/” ระบุว่ามีนิพจน์ทั่วไปอยู่ข้างใน ในเวลาเดียวกันหลังจากอันสุดท้ายเราใส่ "i" นี่เป็นตัวเลือกเช่นเดียวกับในตารางแรก - อย่าคำนึงถึงตัวพิมพ์เล็กและใหญ่ ภายในเครื่องหมายทับคือลำดับปกตินั่นเอง โดยเริ่มต้นด้วยเครื่องหมายน้อยกว่าและแท็กอินพุต และทุกอย่างที่ตามมาหลังจากนั้นจนกระทั่งเครื่องหมายจุดเป็นเพียงข้อความธรรมดาที่ต้องค้นหา แต่ตัวจุดและสัญลักษณ์ที่อยู่ด้านหลังนั้นน่าสนใจมากกว่า ในกรณีนี้คือ การก่อสร้าง “.*?” หมายถึงลำดับของอักขระใดๆ นั่นคือถ้าเรารวมเฉพาะข้อความเข้ากับโครงสร้างนี้ เราจะเลือกข้อความทั้งหมดหลังจากการเกิดขึ้นครั้งแรกและจนจบ หากต้องการหยุด คุณจะต้องพบกับแท็กปิด HTML “มากกว่า” หรืออักขระขึ้นบรรทัดใหม่ การออกแบบนี้ทำให้เรามีโอกาสเช่นนี้: อักขระในวงเล็บเหลี่ยมเชื่อมต่อกันด้วยตรรกะ OR จุดสิ้นสุดคือเครื่องหมายมากกว่าหรือจุดเริ่มต้นของบรรทัด ลองดูอีกสิ่งหนึ่งที่จะทำให้ทุกอย่างแข็งแกร่งขึ้น เราค้นหาลิงก์กับพวกเขา: เราอ่านสำนวน ขอย้ำอีกครั้งว่าเราจะทิ้งเครื่องหมายทับและตัวเลือกก่อน ธง "uis" อธิบายได้ในตัวเอง ยกเว้น "u" ซึ่งฉันไม่ได้อธิบาย - มันแสดงว่าเรากำลังใช้การเข้ารหัส Unicode เหลือไม่มากแล้ว จุดเริ่มต้นคือแท็ก "a" ซึ่งเปิดขึ้นมา จากนั้นก็มาถึงชั้นเรียน ซึ่งหมายถึงไม่มากกว่าหรือน้อยกว่า (การเปิดและปิดแท็ก HTML) ซึ่งก็คืออักขระใดๆ ในกรณีนี้ “+?” ถูกเพิ่มเข้าไปในชั้นเรียน ซึ่งหมายความว่าชั้นเรียนนี้จะมีอยู่ 1 ครั้งขึ้นไป (แต่อย่างน้อย 1 ครั้งแน่นอน) จากนั้นจะมีแท็กปิด html สำหรับแท็ก “a” มีข้อความภายในลิงค์ที่กลุ่มระบุ ท้ายที่สุดเราไม่รู้ว่าจะมีข้อความประเภทใดดังนั้นเราจึงกำหนดกลุ่มดังกล่าว และในตอนท้ายจะมีแท็กปิด “a”: โปรดทราบว่าเราจะหลีกเครื่องหมายทับโดยใช้แบ็กสแลชเพื่อให้มองว่าเป็นข้อความธรรมดา วุ้ย. หัวข้อนี้ค่อนข้างซับซ้อนจริงๆ ต้องอาศัยการฝึกฝน บางทีฉันกำลังทำบางอย่างที่ไม่ค่อยเหมาะสมนักและเป็นไปได้ที่จะสร้างนิพจน์ทั่วไปอื่นๆ ที่ถูกต้องมากขึ้น แต่ฉันก็เรียนรู้ด้วยตนเองได้พอๆ กับที่คุณเป็น ดังนั้นอย่าตัดสินอย่างเคร่งครัด แต่แบ่งปันตัวเลือกของคุณในความคิดเห็นแทน นอกจากนี้ หากมีบางอย่างไม่ชัดเจน ความคิดเห็นและหน้าติดต่อก็พร้อมให้บริการคุณแล้ว/" preg_match_all($tag_regex, $xml, $matches, PREG_PATTERN_ORDER); ส่งคืน $matches; )
$string = "#555555"; if (preg_match("/^#(?:(?:(3))(1,2))$/i", $string)) ( echo "ตัวอย่าง 6 สำเร็จ"; )
",$หน้า,$regs); echo $regs; fclose($fp);
//บันทึก: เว็บเซิร์ฟเวอร์ Apache // เข้าถึงไฟล์ html ได้สำเร็จ มีประโยชน์สำหรับการนับการแสดงผลหน้าเว็บ "^((?#IP ไคลเอนต์หรือชื่อโดเมน)S+)s+((?#การรับรองความถูกต้องขั้นพื้นฐาน)S+s+S+)s+[((?#วันที่และเวลา)[^]]+)]s+"(?: GET|POST|HEAD) ((?#file)/[^ ?]+?.html?)??((?#parameters)[^ ?]+)? HTTP/+"s+(?#รหัสสถานะ)200s+((?#bytes ถ่ายโอน)[-0-9]+)s+"((?#referrer)[^"]*)"s+"((?#user agent )[^"]*)"$" //บันทึก: เว็บเซิร์ฟเวอร์ Apache //404 ข้อผิดพลาด "^((?#client IP หรือชื่อโดเมน)S+)s+((?#การตรวจสอบสิทธิ์พื้นฐาน)S+s+S+)s+ [((?#วันที่และเวลา)[^]]+)]s+"(?:GET|POST|HEAD) ((?#file)[^ ?]+)??((?#parameters)[^ ? "]+)? HTTP/+"s+(?#รหัสสถานะ)404s+((?#bytes ถ่ายโอน)[-0-9]+)s+"((?#referrer)[^"]*)"s+"((?#user agent )[^"]*)"$")
การแทนที่เครื่องหมายคำพูดคู่ด้วยเครื่องหมายคำพูดแบบหยิก preg_replace("B"b([^"x84x93x94rn]+)b"B", "?1?", $text);
WordPress: การรับภาพโพสต์โดยใช้นิพจน์ทั่วไป
การแปลงอีโมติคอนเป็นรูปภาพ
การแสดงออกปกติครั้งแรก
preg_replace("นิพจน์ทั่วไป (รูปแบบ)", "สิ่งที่จะแทนที่การจับคู่ที่พบด้วย", "ตัวแปรที่ใช้ในการแทนที่"); - แทนที่ฟังก์ชัน
if(preg_match("/e/",$a)) echo "พบ!!";
if(preg_match("//",$a)) echo "พบ!!";
if(preg_match("//",$a)) echo "พบ!!";
if(preg_match("//",$a)) echo "พบ!!";
if(preg_match("/[a-zA-Z]/",$a)) echo "พบ!!";Metaตัวละคร
ตัวอย่าง -
ตัวอย่าง - *
if(preg_match("/+/",$a)) echo "รหัสผ่านถูกต้อง";
if(preg_match("/+/",$a)) echo "รหัสผ่านถูกต้อง";
if(preg_match("/^+$/",$a)) echo "รหัสผ่านถูกต้อง";บางครั้ง "ไม่" ก็ยังดีกว่า
if(preg_match("/^[^0-9]+$/",$a)) echo "ไม่มีตัวเลข!";เห็นแล้วเซฟไว้!
preg_match("/ /", $ก);
preg_match("/ /", $ก, $ข);
preg_match("/ /", $ก, $ข);
เสียงสะท้อน $b;ที่อยู่ที่ถูกต้องคือกุญแจสู่ความสำเร็จ!
if(preg_match("/^+@+.+$/", $a)) echo "ที่อยู่อีเมลถูกต้อง!";
else echo "ที่อยู่อีเมลไม่ได้เขียนอย่างถูกต้อง!";
/*
strstr()
เนื่องจากพวกเขาจะทำงานนี้ให้เสร็จเร็วขึ้นมาก
ตัวอย่างที่ 2 ค้นหาคำว่า "เว็บ" ในข้อความ
*/
ลำดับพิเศษ \b ในรูปแบบหมายถึงขอบเขตของคำ ดังนั้น จะมีเพียงคำว่า "เว็บ" เกิดขึ้นเพียงส่วนเดียวเท่านั้นที่จะตรงกัน)) {
หน้ากาก ซึ่งตรงข้ามกับ "สายรัด" หรือ "ใยแมงมุม" ถ้า (preg_match("/\bweb\b/i" ,;
"PHP เป็นภาษาสคริปต์เว็บที่คุณเลือก"
หน้ากาก ซึ่งตรงข้ามกับ "สายรัด" หรือ "ใยแมงมุม" เสียงสะท้อน;
"พบรายการแล้ว" ) อื่น ()) {
หน้ากาก ซึ่งตรงข้ามกับ "สายรัด" หรือ "ใยแมงมุม" ถ้า (preg_match("/\bweb\b/i" ,;
"PHP เป็นภาษาสคริปต์เว็บที่คุณเลือก"
หน้ากาก ซึ่งตรงข้ามกับ "สายรัด" หรือ "ใยแมงมุม" เสียงสะท้อน;
}
?>
)preg_match ("/\bweb\b/i" ,
เริ่มจากข้อเท็จจริงที่ว่ามีหลายฟังก์ชันสำหรับการทำงานกับนิพจน์ทั่วไปใน PHP แต่ส่วนใหญ่มักใช้สามฟังก์ชัน:
นอกจากนี้ยังมีตัวอย่างของการใช้ preg_match_all ซึ่งมีประโยชน์ในการค้นหาลิงก์ทั้งหมดในข้อความที่เหลือ เราต้องการลิงก์เนื่องจากมีคำหลักที่เรากำลังแยกวิเคราะห์ นี่คือสิ่งที่เกิดขึ้น:วิธีเขียนประโยคปกติ
ในทางกลับกัน MetaCharacters สามารถมีตัวแก้ไขได้:
ตอนนี้เราสามารถวิเคราะห์รูปแบบปกติของเราจากบทเรียนที่แล้วได้แล้ว จากสัญญาณข้างต้นเรามาลองทำความเข้าใจกับสิ่งที่เรามีกันดีกว่า นี่คือการแสดงออก:
นั่นคือนิพจน์ทั้งหมด โดยในนั้น เราได้กำหนดเงื่อนไขเริ่มต้น เงื่อนไขตรงกลางและจุดสิ้นสุด ไม่ยากใช่ไหม? นี่คือภาพประกอบเพื่อความชัดเจน: