⊗ppPmRgEP 254 of 447 menu

การจับกลุ่มในนิพจน์ทั่วไปใน PHP

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

สามารถเข้าถึงเนื้อหาของการจับกลุ่มได้ตามหมายเลขของพวกมัน, โดยมีเครื่องหมายแบ็กสแลชนำหน้า ตัวอย่างเช่น, การจับกลุ่มศูนย์จะสามารถเข้าถึงได้แบบนี้: \0, การจับกลุ่มแรกแบบนี้ - \1, การจับกลุ่มที่สอง - \2 และต่อไปเรื่อยๆ

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

ตัวอย่าง

สมมติว่าเรามีสตริงดังนี้:

<?php $str = 'aa bb cd ef'; ?>

ลองหาตำแหน่งทั้งหมดในสตริงนั้น ที่มี ตัวอักษรสองตัวใดๆ ที่เหมือนกันเรียงต่อกัน สำหรับการแก้ปัญหา เราจะค้นหาตัวอักษรใดๆ, ใส่มันลงในการจับกลุ่ม จากนั้นตรวจสอบว่า ตัวอักษรถัดไปเป็นเนื้อหาของการจับกลุ่มนั้นหรือไม่:

<?php $res = preg_replace('#([a-z])\1#', '!', $str); ?>

ผลลัพธ์ที่เขียนลงในตัวแปรจะเป็นดังนี้:

'! ! cd ef'

ตัวอย่าง

สมมติว่าเรามีสตริงดังนี้:

<?php $str = 'asxca buzxb csgd'; ?>

ลองหาคำทั้งหมดในสตริงนั้น ที่มี ตัวอักษรตัวแรกและตัวสุดท้ายเหมือนกัน สำหรับการแก้ปัญหา ให้เขียนรูปแบบดังนี้: ตัวอักษร, ตามด้วยตัวอักษรหนึ่งตัวหรือมากกว่า และจากนั้นตัวอักษร ที่เหมือนกับตัวแรก:

<?php $res = preg_replace('#([a-z])[a-z]+\1#', '!', $str); ?>

ผลลัพธ์ที่เขียนลงในตัวแปรจะเป็นดังนี้:

'! ! csgd'

ตัวอย่าง

แทนที่จะใช้ \1 สามารถเขียน \g1 ได้:

<?php $res = preg_replace('#([a-z])[a-z]+\g1#', '!', $str); ?>

ตัวอย่าง

ยังสามารถเขียน \g{1} ได้:

<?php $res = preg_replace('#([a-z])[a-z]+\g{1}#', '!', $str); ?>

ตัวอย่าง

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

<?php $res = preg_replace('#([a-z])([a-z])\g{-2}#', '!', $str); ?>

โจทย์ฝึกปฏิบัติ

กำหนดสตริง:

<?php $str = 'aaa bbb ccc xyz'; ?>

ค้นหาสตริงย่อยทั้งหมด ที่มี ตัวอักษรสามตัวที่เหมือนกันเรียงต่อกัน

กำหนดสตริง:

<?php $str = 'a aa aaa abab bbbb'; ?>

ค้นหาสตริงย่อยทั้งหมด ที่มี ตัวอักษรที่เหมือนกันสองตัวหรือมากกว่าเรียงต่อกัน

กำหนดสตริง:

<?php $str = 'aaa aaa bbb bbb ccc ddd'; ?>

ค้นหาสตริงย่อยทั้งหมด ที่มี คำที่เหมือนกันสองคำเรียงต่อกัน

ไทย
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣTürkmenTürkçeЎзбекOʻzbekTiếng Việt
เราใช้คุกกี้สำหรับการทำงานของเว็บไซต์ การวิเคราะห์ และการปรับเนื้อหาให้เหมาะสมส่วนบุคคล การประมวลผลข้อมูลเกิดขึ้นตาม นโยบายความเป็นส่วนตัว.
ยอมรับทั้งหมด ปรับแต่ง ปฏิเสธ