นิพจน์ทั่วไป php s นิพจน์ทั่วไป (รูปแบบ) วิธีการเขียนประโยคปกติ
การใช้นิพจน์ทั่วไปทั่วไปใน Perl คือการค้นหาและแทนที่ตัวดำเนินการ เช่น s// , m/ ตัวดำเนินการเชื่อมโยง =~ หรือ != เป็นต้น ตามกฎแล้ว โอเปอเรเตอร์เหล่านี้ทั้งหมดมีตัวเลือกที่คล้ายกัน เช่น:
โดยปกติแล้ว ตัวเลือกทั้งหมดเหล่านี้จะแสดงเป็น "/x" สามารถใช้ภายในเทมเพลตโดยใช้โครงสร้างใหม่ (?...)
นิพจน์ทั่วไปหรือรูปแบบจะเหมือนกับขั้นตอน regexp ใน Unix นิพจน์และไวยากรณ์ยืมมาจากขั้นตอน V8 ที่แจกจ่ายอย่างอิสระโดย Henry Spencer ซึ่งมีการอธิบายโดยละเอียด
เทมเพลตใช้อักขระเมตาต่อไปนี้ (อักขระที่แสดงถึงกลุ่มของอักขระอื่น) ซึ่งมักเรียกว่ามาตรฐาน egrep:
MetaCharacter มีตัวดัดแปลง (เขียนหลัง meta character):
ในกรณีอื่นๆ ทั้งหมด วงเล็บปีกกาจะถือเป็นอักขระธรรมดา (ปกติ) ดังนั้น "*" จึงเทียบเท่ากับ (0,) , "+" คือ (1,) และ "?" - (0.1) n และ m ต้องไม่มากกว่า 65536
ตามค่าเริ่มต้น เมตาคาแรคเตอร์จะโลภมาก การแข่งขันจะเผยแพร่หลายครั้งที่สุดเท่าที่จะเป็นไปได้ โดยไม่คำนึงถึงผลกระทบของเมตาอักขระที่ตามมา หากคุณต้องการ "ลดความอยากอาหาร" ให้ใช้สัญลักษณ์ "?" สิ่งนี้ไม่ได้เปลี่ยนความหมายของเมตาคาแรคเตอร์ แต่เพียงลดการแพร่กระจายเท่านั้น ดังนั้น:
สัญลักษณ์แทนทำงานในลักษณะเดียวกับเครื่องหมายคำพูดคู่ ดังนั้นคุณจึงใช้ `\` - อักขระ (อักขระแบ็กสแลช) ได้:
\t | - อักขระแท็บ |
\n | - บรรทัดใหม่ |
\r | - การโอนรถ |
\ก | - การแปลรูปแบบ |
\v | - การจัดตารางแนวตั้ง |
\ก | - เรียก |
\e | - หนี |
\033 | - สัญกรณ์สัญลักษณ์ฐานแปด |
\x1A | - เลขฐานสิบหก |
\ค[ | - สัญลักษณ์ควบคุม |
\ล | - ตัวอักษรตัวถัดไปตัวพิมพ์เล็ก |
\u | - ตัวพิมพ์ใหญ่ -//- |
\ล | - ตัวอักษรทั้งหมดเป็นตัวพิมพ์เล็กจนถึง \E |
\U | - ด้านบน -//- |
\E | - ลงทะเบียนตัว จำกัด การเปลี่ยนแปลง |
\คิว | - ยกเลิกการกระทำที่เป็นเมตาตัวละคร |
นอกจากนี้ metaCharacters ต่อไปนี้ได้ถูกเพิ่มลงใน Perl:
โปรดทราบว่านี่คืออักขระ "ตัวเดียว" ทั้งหมด ใช้ตัวแก้ไขเพื่อระบุลำดับ ดังนั้น:
นอกจากนี้ยังมีอักขระเมตาในจินตนาการอีกด้วย แสดงถึงสัญลักษณ์ที่ไม่มีอยู่ ณ ตำแหน่งที่ค่าเปลี่ยนแปลง เช่น:
ขอบเขตคำ (\b) เป็นจุดจินตภาพระหว่างอักขระ \w และ \W ภายในคลาสอักขระ "\b" แสดงถึงอักขระ Backspace เมตาอักขระ \A และ \Z คล้ายกับ "^" และ "$" แต่ในขณะที่บรรทัดเริ่มต้น "^" และจุดสิ้นสุดบรรทัด "$" ทำหน้าที่สำหรับแต่ละบรรทัดในสตริงหลายบรรทัด ดังนั้น \A และ \Z จะทำเครื่องหมายจุดเริ่มต้นและ จุดสิ้นสุดของสตริงหลายบรรทัดทั้งหมด
หากใช้การจัดกลุ่ม (วงเล็บ) ภายในรูปแบบ หมายเลขสตริงย่อยของกลุ่มจะถูกกำหนดเป็น "\digit" โปรดทราบว่าตามรูปแบบภายในนิพจน์หรือบล็อก กลุ่มเหล่านี้จะแสดงเป็น "$digit" นอกจากนี้ยังมีตัวแปรเพิ่มเติม:
ตัวอย่าง:
$s = "หนึ่ง 1 สอง 2 และสาม 3";
ถ้า ($s =~ /(\d+)\D+(\d+)/) ( พิมพ์ "$1\n"; # ผลลัพธ์ "1" พิมพ์ "$2\n"; # "2" พิมพ์ "$+\n" ; # "2" พิมพ์ "$&\n"; # "1 สอง 2" พิมพ์ "$`\n"; # "หนึ่ง " พิมพ์ "$"\n"; # " และสาม 3" )
ตัวอย่าง:
Perl เวอร์ชัน 5 มีโครงสร้างเทมเพลตเพิ่มเติม:
$s = "1+2-3*4"; if ($s =~ /(\d)(?=-)/) # ค้นหาตัวเลขตามด้วย "-" ( พิมพ์ "$1\n"; # ผลลัพธ์ "2" ) else ( พิมพ์ "ข้อผิดพลาดการค้นหา\n" ; )
ตัวอย่าง:
(?!รูปแบบ) - “มองไปข้างหน้า” ด้วยการปฏิเสธ:
$s = "1+2-3*4"; if ($s =~ /(\d)(?!\+)/) # ค้นหาตัวเลขที่ไม่ตามด้วย "+" ( พิมพ์ "$1\n"; # ผลลัพธ์ "2" ) else ( พิมพ์ "ค้นหา ข้อผิดพลาด\n"; )
(?ismx) - ตัวดัดแปลง "ภายใน" สะดวกในการใช้ในเทมเพลต เช่น คุณต้องระบุตัวแก้ไขภายในเทมเพลต กฎการแสดงออกปกติ
ฟอรัมพอร์ทัล PHP ส.อ.
นิพจน์ทั่วไปเป็นเครื่องมือที่มีประโยชน์มากสำหรับนักพัฒนา สามารถใช้เพื่อค้นหา ระบุ หรือแทนที่ข้อความ คำ หรืออักขระอื่นๆ บทความวันนี้ประกอบด้วยนิพจน์ทั่วไปที่มีประโยชน์ที่สุด 15 รายการซึ่งจะเป็นประโยชน์สำหรับนักพัฒนาเว็บนักพัฒนาใหม่จำนวนมากพบว่านิพจน์ทั่วไปเข้าใจและใช้งานได้ยากมาก ที่จริงแล้วทุกอย่างไม่ได้ยากอย่างที่คิด ก่อนที่เราจะพูดถึงนิพจน์ทั่วไปด้วยโค้ดที่มีประโยชน์และใช้งานได้หลากหลาย มาดูข้อมูลพื้นฐานกันก่อน:
ไวยากรณ์นิพจน์ทั่วไป
การแสดงออกปกติ | วิธี |
ฟู | สตริง “ฟู” |
^ฟู่ | บรรทัดขึ้นต้นด้วย “foo” |
ฟู$ | บรรทัดลงท้ายด้วย “foo” |
^ฟู$ | "foo" ปรากฏเพียงครั้งเดียวในบรรทัด |
ก ข หรือค | |
อักขระตัวพิมพ์เล็กใด ๆ | |
[^ก-ฮ] | ตัวละครใด ๆ ที่ไม่อยู่ใน ตัวพิมพ์ใหญ่ |
(gif|jpg) | หมายถึงทั้ง “gif” และ “jpeg” |
+ | อักขระตัวพิมพ์เล็กอย่างน้อยหนึ่งตัว |
ตัวเลข จุด หรือเครื่องหมายลบใดๆ | |
^{1,}$ | คำใดก็ได้ อย่างน้อยหนึ่งตัวอักษร ตัวเลข หรือ _ |
()() | wy, wz, xy หรือ xz |
(^เอ-ซ่า-z0-9) | อักขระใดๆ (ไม่ใช่ตัวเลขหรือตัวอักษร) |
({3}|{4}) | หมายถึงตัวอักษรสามตัวหรือตัวเลข 4 ตัว |
ฟังก์ชัน PHP สำหรับนิพจน์ทั่วไป
การทำงาน | คำอธิบาย |
preg_match() | ฟังก์ชัน preg_match() ค้นหาสตริงโดยใช้รูปแบบที่กำหนด จะส่งคืนค่าเป็นจริงหากพบสตริง มิฉะนั้นจะคืนค่าเป็นเท็จ |
preg_match_all() | ฟังก์ชัน preg_match_all() ค้นหารายการทั้งหมดของสตริงที่มีรูปแบบ |
preg_แทนที่() | ฟังก์ชัน preg_replace() ทำงานบนหลักการเดียวกันกับ ereg_replace() ยกเว้นว่านิพจน์ทั่วไปสามารถใช้เพื่อระบุทั้งรูปแบบการค้นหาและสตริงที่จะใช้แทนที่ค่าที่พบ |
preg_split() | ฟังก์ชัน preg_split() ทำหน้าที่เหมือนกับ split() ยกเว้นว่านิพจน์ทั่วไปสามารถใช้เป็นพารามิเตอร์ให้กับรูปแบบการค้นหาได้ |
preg_grep() | ฟังก์ชัน preg_grep() ค้นหาองค์ประกอบทั้งหมดของอาร์เรย์อินพุต โดยส่งคืนองค์ประกอบทั้งหมดที่ตรงกับรูปแบบนิพจน์ทั่วไป |
preg_quote() | เลี่ยงอักขระนิพจน์ทั่วไป |
ตรวจสอบว่าสตริงเป็นชื่อโดเมนที่ถูกต้องหรือไม่
$url = "http://komunitasweb.com/"; if (preg_match("/^(http|https|ftp)://(*(?:.*)+):?(d+)?/?/i", $url)) ( echo "URL ของคุณก็โอเค "; ) อื่น ๆ ( echo "URL ผิด"; )
การเน้นคำในข้อความนี่เป็นนิพจน์ทั่วไปที่มีประโยชน์มาก โดยคุณสามารถค้นหาคำที่ต้องการและไฮไลต์ได้ มีประโยชน์อย่างยิ่งในการแสดงผลการค้นหา
$text = "ประโยคตัวอย่างจาก KomunitasWeb regex ได้รับความนิยมในการเขียนโปรแกรมเว็บ ตอนนี้เราเรียนรู้ regex ตามวิกิพีเดีย นิพจน์ทั่วไป (ตัวย่อว่า regex หรือ regexp โดยมีรูปแบบพหูพจน์ regexes, regexps หรือ regexen) ถูกเขียนในรูปแบบที่เป็นทางการ ภาษาที่สามารถตีความได้โดยตัวประมวลผลนิพจน์ทั่วไป"; $text = preg_replace("/b(regex)b/i", "1", $text); สะท้อน $ข้อความ;
เน้นผลการค้นหาในบล็อก WordPressดังที่กล่าวไว้ในตัวอย่างก่อนหน้านี้ ตัวอย่างโค้ดนี้สะดวกในการใช้ในผลการค้นหา และเป็นวิธีที่ดีเยี่ยมในการใช้ฟังก์ชันนี้ในบล็อก WordPress
เปิดไฟล์ search.php ของคุณ และค้นหาฟังก์ชัน the_title() แทนที่ด้วยรหัสต่อไปนี้:
เสียงสะท้อน $title;
เหนือบรรทัดนี้ ให้เพิ่มโค้ดนี้:
บันทึกไฟล์ search.php และเปิด style.css เพิ่มบรรทัดต่อไปนี้:
Strong.search-ข้อความที่ตัดตอนมา ( พื้นหลัง: สีเหลือง; )
รับภาพทั้งหมดจากเอกสาร HTMLหากคุณต้องการรับรูปภาพทั้งหมดจากหน้าเว็บ โค้ดนี้เป็นสิ่งที่ต้องมี คุณสามารถสร้างโปรแกรมดาวน์โหลดรูปภาพได้อย่างง่ายดายโดยใช้พลังของ cURL
$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 ขอย้ำอีกครั้งว่าฟังก์ชันนี้สะดวกมากเมื่อใช้ร่วมกับ cURL
ฟังก์ชัน get_tag($tag, $xml) ( $tag = preg_quote($tag); preg_match_all("(]*>(.*?).")", $xml, $matches, PREG_PATTERN_ORDER); return $matches; )
ค้นหาแท็ก XHTML/XML ด้วยค่าแอตทริบิวต์เฉพาะฟังก์ชันนี้คล้ายกับฟังก์ชันก่อนหน้ามาก ยกเว้นว่าคุณสามารถกำหนดแอตทริบิวต์ที่ต้องการให้กับแท็กได้ ตัวอย่างเช่น คุณสามารถค้นหาได้อย่างง่ายดาย
ฟังก์ชั่น 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 = "/]*$attr\s*=\s*". .*?)/" preg_match_all($tag_regex, $xml, $matches, PREG_PATTERN_ORDER); ส่งคืน $matches; )
ค้นหาค่าสีเลขฐานสิบหกอีกหนึ่งเครื่องมือที่มีประโยชน์สำหรับนักพัฒนาเว็บ! ช่วยให้คุณค้นหา/ตรวจสอบค่าสีเลขฐานสิบหก
$string = "#555555"; if (preg_match("/^#(?:(?:(3))(1,2))$/i", $string)) ( echo "ตัวอย่าง 6 สำเร็จ"; )
ค้นหาชื่อบทความข้อมูลโค้ดนี้จะค้นหาและแสดงข้อความภายในแท็กบนหน้า html
$fp = fopen("http://www.catswhocode.com/blog","r"); ในขณะที่ (!feof($fp))( $page .= fgets($fp, 4096); ) $titre = eregi("(.*)",$page,$regs); เสียงสะท้อน $regs; fclose($fp);
การแยกวิเคราะห์บันทึก Apacheเว็บไซต์ส่วนใหญ่เปิดตัวบนที่รู้จักกันดี เว็บเซิร์ฟเวอร์อาปาเช่- หากเว็บไซต์ของคุณเป็นหนึ่งในนั้น ทำไมไม่ใช้ PHP และนิพจน์ทั่วไปเพื่อแยกวิเคราะห์บันทึก Apache
//บันทึก: เว็บเซิร์ฟเวอร์ 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 )[^"]*)"$"
การแทนที่เครื่องหมายคำพูดคู่ด้วยเครื่องหมายคำพูดอัจฉริยะหากคุณเป็นผู้ชื่นชอบการพิมพ์ คุณจะต้องชอบสำนวนปกตินี้ที่แทนที่เครื่องหมายคำพูดคู่ปกติด้วยเครื่องหมายคำพูดอัจฉริยะ นิพจน์ทั่วไปที่คล้ายกันนี้ใช้ใน WordPress ในเนื้อหาของหน้า
Preg_replace("B"b([^"x84x93x94rn]+)b"B", "?1?", $ข้อความ);
การตรวจสอบรหัสผ่านที่ครอบคลุมนิพจน์ทั่วไปนี้จะช่วยให้แน่ใจว่ามีการป้อนอักขระ ตัวเลข ขีดกลาง และขีดล่างอย่างน้อยหกตัวลงในฟิลด์ข้อความ
ช่องข้อความต้องมีอักขระตัวพิมพ์ใหญ่อย่างน้อยหนึ่งตัว อักขระตัวพิมพ์เล็กหนึ่งตัว และตัวเลขหนึ่งตัว
"A(?=[-_a-zA-Z0-9]*?)(?=[-_a-zA-Z0-9]*?)(?=[-_a-zA-Z0-9]*?) [-_a-zA-Z0-9](6,)z"
WordPress: การใช้นิพจน์ทั่วไปเพื่อรับรูปภาพจากโพสต์เนื่องจากหลายๆ คนเป็นผู้ใช้ WordPress คุณอาจจำเป็นต้องมีโค้ดที่ช่วยให้คุณได้รับรูปภาพทั้งหมดจากข้อความในบทความและแสดงได้
หากต้องการใช้โค้ดนี้ เพียงวางลงในไฟล์ใดก็ได้ในธีมของคุณ