ยัติภังค์ภายในชุดใน regex PHP
ยัติภังค์ - ยังเป็นอักขระพิเศษภายใน []
(แต่ข้างนอก - ไม่ใช่) หากคุณต้องการยัติภังค์เองเป็นสัญลักษณ์ - ให้วางมันในที่ที่ มันจะไม่ถูกตีความเป็นตัวแบ่งกลุ่ม
ทำไมนี่ถึงสำคัญ: คุณสามารถสร้างกลุ่มอักขระโดยที่ไม่รู้ตัว ตัวอย่างเช่น
แบบนี้ - [:-@] - คุณคิดว่าคุณเลือก colon, ยัติภังค์ และ at sign แต่จริง ๆ แล้วได้กลุ่มอักขระระหว่าง
: และ @ กลุ่มนี้ประกอบด้วย
อักขระต่อไปนี้: :, ;, ?,
<, =, >
มันมาจากไหน? จากตาราง ASCII - colon มีหมายเลขน้อยกว่า at sign - และกลายเป็นกลุ่ม นั่นคือกลุ่มทั้งหมด ถูกสร้างขึ้นตามตาราง ASCII (หากต้องการ คุณสามารถใช้สิ่งนี้ได้)
จะจัดการกับสิ่งนี้อย่างไร: วางอักขระยัติภังค์
ในตำแหน่งที่มันจะไม่ถูกตีความเป็น
อักขระของกลุ่มอย่างแน่นอน เช่น ที่เริ่มต้นหรือที่ท้าย
(นั่นคือหลังจาก [ หรือก่อน ])
คุณยังสามารถ escape ยัติภังค์ได้ - จากนั้น
มันจะหมายถึงตัวมันเองโดยไม่ขึ้นกับ
ตำแหน่ง ตัวอย่างเช่น แทนที่ [:-@] ด้วย
[:\-@] - และจะไม่มีกลุ่มอีกต่อไป แต่
จะมีสามอักขระ - colon, ยัติภังค์ และ at sign @
ตัวอย่าง
ในตัวอย่างต่อไปนี้รูปแบบการค้นหาคือ:
ตัวเลข 1 ตามด้วยตัวอักษรจาก 'a'
ถึง 'z' ตามด้วยตัวเลข 2:
<?php
$str = '1a2 1-2 1c2 1z2';
$res = preg_replace('#1[a-z]2#', '!', $str);
?>
ผลลัพธ์ที่เขียนลงในตัวแปรจะเป็นดังนี้:
'! 1-2 ! !'
ตัวอย่าง
ตอนนี้เรามา escape ยัติภังค์กัน ผลลัพธ์
รูปแบบการค้นหาคือ: ตัวเลข 1 ตามด้วย
ตัวอักษร 'a' หรือยัติภังค์ หรือตัวอักษร 'z'
ตามด้วยตัวเลข 2:
<?php
$str = '1a2 1-2 1c2 1z2';
$res = preg_replace('#1[a\-z]2#', '!', $str);
?>
ผลลัพธ์ที่เขียนลงในตัวแปรจะเป็นดังนี้:
'! ! 1c2 !'
ตัวอย่าง
คุณสามารถย้ายยัติภังค์ได้โดยไม่ต้อง escape มัน:
<?php
$str = '1a2 1-2 1c2 1z2';
$res = preg_replace('#1[az-]2#', '!', $str);
?>
ผลลัพธ์ที่เขียนลงในตัวแปรจะเป็นดังนี้:
'! ! 1c2 !'
ตัวอย่าง
ในตัวอย่างต่อไปนี้รูปแบบการค้นหาคือ:
อักขระตัวแรก - คือตัวอักษรพิมพ์เล็กหรือ
ยัติภังค์ '-' จากนั้นสองตัวอักษร 'x':
<?php
$str = 'axx Axx -xx @xx';
$res = preg_replace('#[a-z-]xx#', '!', $str);
?>
ผลลัพธ์ที่เขียนลงในตัวแปรจะเป็นดังนี้:
'! Axx ! @xx'
ตัวอย่าง
ในตัวอย่างต่อไปนี้รูปแบบการค้นหาคือ:
อักขระตัวแรก - คือตัวอักษรพิมพ์เล็ก พิมพ์ใหญ่
หรือยัติภังค์ '-' จากนั้นสองตัวอักษร
'x':
<?php
$str = 'axx Axx -xx @xx';
$res = preg_replace('#[a-zA-Z-]xx#', '!', $str);
?>
ผลลัพธ์ที่เขียนลงในตัวแปรจะเป็นดังนี้:
'! ! ! @xx'
ตัวอย่าง
คุณสามารถวางยัติภังค์ระหว่างสองกลุ่ม - ที่นั่นมันจะไม่สร้างกลุ่มเพิ่มอย่างแน่นอน:
<?php
$str = 'axx 9xx -xx @xx';
$res = preg_replace('#[a-z-0-9]xx#', '!', $str);
?>
ผลลัพธ์ที่เขียนลงในตัวแปรจะเป็นดังนี้:
'! ! ! @xx'
โจทย์ฝึกปฏิบัติ
กำหนดสตริง:
<?php
$str = 'xaz xBz xcz x-z x@z';
?>
ค้นหาสตริงทั้งหมดตามรูปแบบต่อไปนี้:
ตัวอักษร 'x' ตัวอักษรพิมพ์ใหญ่หรือพิมพ์เล็ก
หรือยัติภังค์ ตัวอักษร 'z'
กำหนดสตริง:
<?php
$str = 'xaz x$z x-z xcz x+z x%z x*z';
?>
ค้นหาสตริงทั้งหมดตามรูปแบบต่อไปนี้:
ตัวอักษร 'x' จากนั้นคือ dollar sign หรือ
ยัติภังค์หรือ plus sign จากนั้นตัวอักษร 'z'