สัญลักษณ์เครื่องหมายหมวกภายในเซ็ตใน Regular Expressions ของ PHP

อย่างที่คุณทราบ เครื่องหมายหมวกภายใน [] จะทำหน้าที่ เป็นการปฏิเสธ เมื่อเขียนไว้ที่ตำแหน่งแรกของวงเล็บ ซึ่งหมายความว่ามันเป็นอักขระพิเศษภายใน วงเล็บเหล่านี้ เพื่อให้ได้เครื่องหมายหมวกเป็นอักขระธรรมดา จำเป็นต้องทำการ escape มัน หรือย้ายมันออกจาก ตำแหน่งแรก

ตัวอย่าง

ในตัวอย่างถัดไป แพตเทิร์นการค้นหาคือ: อักขระตัวแรก - คือทุกอย่างยกเว้น 'd', ตามด้วยตัวอักษรสองตัว 'x'

php<?php
  $str = 'axx bxx ^xx dxx';
  $res = preg_replace('#[^d]xx#', '!', $str);
?>

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

php'! ! ! dxx'

ตัวอย่าง

และตอนนี้แพตเทิร์นการค้นหาคือ: อักขระตัวแรก - คือ 'd' หรือ '^', ตามด้วย ตัวอักษรสองตัว 'x':

php<?php
  $str = 'axx bxx ^xx dxx';
  $res = preg_replace('#[d^]xx#', '!', $str);
?>

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

php'axx bxx ! !'

ตัวอย่าง

คุณสามารถไม่ต้องย้ายเครื่องหมายหมวกออกจากตำแหน่งแรกก็ได้ แต่เพียงแค่ทำการ escape มันโดยใช้เครื่องหมาย backslash และมันจะหมายถึงตัวมันเอง:

php<?php
  $str = 'axx bxx ^xx dxx';
  $res = preg_replace('#[\^d]xx#', '!', $str);
?>

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

php'axx bxx ! !'

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

Задание 1

กำหนดสตริง:

php<?php
  $str = '^xx axx ^zz bkk @ss';
?>

เขียน regular expression ที่จะค้นหาสตริง ตามแพตเทิร์น: เครื่องหมายหมวกหรือเครื่องหมาย @ แล้วตามด้วย ตัวอักษรละตินสองตัว

Задание 2

กำหนดสตริง:

php<?php
  $str = '^xx axx ^zz bkk @ss';
?>

เขียน regular expression ที่จะค้นหาสตริง ตามแพตเทิร์น: ไม่ใช่เครื่องหมายหมวกและไม่ใช่เครื่องหมาย @ แล้วตามด้วย ตัวอักษรละตินสองตัว

Задание 3

กำหนดสตริง:

php<?php
  $str = '^xx axx ^zz bkk';
?>

เขียน regular expression ที่จะค้นหาสตริง ตามแพตเทิร์น: ไม่ใช่เครื่องหมายหมวก แล้วตามด้วยตัวอักษรละติน สองตัว