⊗ppPmRgCPN 257 of 447 menu

หมายเลขรวมของกลุ่มจับใน Regular Expressions PHP

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

<?php $reg = '#19(9\d)|20(\d\d)#'; ?>

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

นี่คือตัวเลือกแรก:

<?php $str = '1991'; preg_match($reg, $str, $res); var_dump($res); // [1 => '91'] ?>

และนี่คือตัวเลือกที่สอง:

<?php $str = '2021'; preg_match($reg, $str, $res); var_dump($res); // [2 => '21'] ?>

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

<?php $year = $res[1]; // ต้องการคีย์เป็น 1 หรือ 2 ?>

สามารถแก้ปัญหาได้ด้วยเงื่อนไข:

<?php if (!empty($res[1])){ $year = $res[1]; } else{ $year = $res[2]; } ?>

อย่างไรก็ตาม มีวิธีแก้ปัญหาที่ง่ายกว่า สามารถใช้ คำสั่งพิเศษ (?| ) กลุ่มจับทั้งหมด ที่อยู่ภายในมันจะมีหมายเลขเดียวกัน

มาแก้ไขนิพจน์ทั่วไปของเรา

<?php $reg = '#(?|19(9\d)|20(\d\d))#'; ?>

และตอนนี้ปีของเราจะอยู่ในกลุ่มจับ หมายเลขหนึ่งอย่างแน่นอน:

<?php $year = $res[1]; ?>

ให้สตริงที่มีวันที่ โดยที่ปีสามารถ เปลี่ยนแปลงได้ตั้งแต่ 1990 ถึง 2099:

<?php $arr = [ '31-12-2025', '30-11-1995', '29-10-1990', ]; ?>

สำหรับแต่ละวันที่ ให้วางวันลงในกลุ่มจับแรก เดือนลงในกลุ่มจับที่สอง และสองหลักสุดท้ายของปี - ลงในกลุ่มจับที่สาม

ไทย
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
เราใช้คุกกี้สำหรับการทำงานของเว็บไซต์ การวิเคราะห์ และการปรับเนื้อหาให้เหมาะสมส่วนบุคคล การประมวลผลข้อมูลเกิดขึ้นตาม นโยบายความเป็นส่วนตัว.
ยอมรับทั้งหมด ปรับแต่ง ปฏิเสธ