สัญลักษณ์เครื่องหมายหมวกภายในเซ็ตใน Regular Expressions ของ PHP
อย่างที่คุณทราบ เครื่องหมายหมวกภายใน [] จะทำหน้าที่
เป็นการปฏิเสธ เมื่อเขียนไว้ที่ตำแหน่งแรกของวงเล็บ
ซึ่งหมายความว่ามันเป็นอักขระพิเศษภายใน
วงเล็บเหล่านี้ เพื่อให้ได้เครื่องหมายหมวกเป็นอักขระธรรมดา
จำเป็นต้องทำการ escape มัน หรือย้ายมันออกจาก
ตำแหน่งแรก
ตัวอย่าง
ในตัวอย่างถัดไป แพตเทิร์นการค้นหาคือ:
อักขระตัวแรก - คือทุกอย่างยกเว้น 'd',
ตามด้วยตัวอักษรสองตัว 'x'
<?php
$str = 'axx bxx ^xx dxx';
$res = preg_replace('#[^d]xx#', '!', $str);
?>
ผลลัพธ์ที่ได้ในตัวแปรจะเป็นดังนี้:
'! ! ! dxx'
ตัวอย่าง
และตอนนี้แพตเทิร์นการค้นหาคือ: อักขระตัวแรก
- คือ 'd' หรือ '^', ตามด้วย
ตัวอักษรสองตัว 'x':
<?php
$str = 'axx bxx ^xx dxx';
$res = preg_replace('#[d^]xx#', '!', $str);
?>
ผลลัพธ์ที่ได้ในตัวแปรจะเป็นดังนี้:
'axx bxx ! !'
ตัวอย่าง
คุณสามารถไม่ต้องย้ายเครื่องหมายหมวกออกจากตำแหน่งแรกก็ได้ แต่เพียงแค่ทำการ escape มันโดยใช้เครื่องหมาย backslash และมันจะหมายถึงตัวมันเอง:
<?php
$str = 'axx bxx ^xx dxx';
$res = preg_replace('#[\^d]xx#', '!', $str);
?>
ผลลัพธ์ที่ได้ในตัวแปรจะเป็นดังนี้:
'axx bxx ! !'
โจทย์ฝึกปฏิบัติ
กำหนดสตริง:
<?php
$str = '^xx axx ^zz bkk @ss';
?>
เขียน regular expression ที่จะค้นหาสตริง ตามแพตเทิร์น: เครื่องหมายหมวกหรือเครื่องหมาย @ แล้วตามด้วย ตัวอักษรละตินสองตัว
กำหนดสตริง:
<?php
$str = '^xx axx ^zz bkk @ss';
?>
เขียน regular expression ที่จะค้นหาสตริง ตามแพตเทิร์น: ไม่ใช่เครื่องหมายหมวกและไม่ใช่เครื่องหมาย @ แล้วตามด้วย ตัวอักษรละตินสองตัว
กำหนดสตริง:
<?php
$str = '^xx axx ^zz bkk';
?>
เขียน regular expression ที่จะค้นหาสตริง ตามแพตเทิร์น: ไม่ใช่เครื่องหมายหมวก แล้วตามด้วยตัวอักษรละติน สองตัว