PHP Regular Ifodalarda [ ] Ichida Defis

Defis - [ ] ichida [] maxsus belgidir (tashqarida - emas). Agar sizga defis o'zi kerak bo'lsa - uni guruh ajratuvchisi sifatida qabul qilinmaydigan joyga qo'ying.

Bu nima uchun muhim: siz o'zingiz sezmasdan belgilar guruhini yaratishingiz mumkin. Masalan, [:-@] - siz ikkita nuqta, defis va @ belgisini tanlayotganingizni o'ylaysiz, lekin aslida : va @ orasidagi belgilar guruhini olasiz. Ushbu guruhga quyidagi belgilar kiradi: :, ;, ?, <, =, >.

Ular qayerdan keladi? ASCII jadvalidan - ikkita nuqta raqami @ belgisidan kichik - va guruh hosil bo'ladi. Ya'ni barcha guruhlar ASCII jadvali bo'yicha hosil bo'ladi (istak bo'lsa, undan foydalanish mumkin).

Bunga qanday qarshi turish kerak: defis belgisini u aniq guruh belgisi sifatida qabul qilinmaydigan joyga, masalan, boshida yoki oxirida (ya'ni [ dan keyin yoki ] dan oldin) qo'ying.

Shuningdek, defisni ekranlash mumkin - unda u qayerda turishidan qat'iy nazar o'zini anglatadi. Masalan, [:-@] o'rniga [:\-@] yozing - va endi guruh bo'lmaydi, balki uchta belgi - ikkita nuqta, defis va @ belgisi bo'ladi.

Misol

Quyidagi misolda qidiruv shabloni quyidagicha: 1 raqami, keyin 'a' dan 'z' gacha harf, keyin 2 raqami:

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

Natijada o'zgaruvchiga quyidagi yoziladi:

php'! 1-2 ! !'

Misol

Keling endi defisni ekranlaymiz. Natijada qidiruv shabloni quyidagicha: 1 raqami, keyin 'a' harfi, yoki defis, yoki 'z' harfi, keyin 2 raqami:

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

Natijada o'zgaruvchiga quyidagi yoziladi:

php'! ! 1c2 !'

Misol

Shunchaki defisni ekranlamasdan, o'rnini almashtirish mumkin:

php<?php
  $str = '1a2 1-2 1c2 1z2';
  $res = preg_replace('#1[az-]2#', '!', $str);
?>

Natijada o'zgaruvchiga quyidagi yoziladi:

php'! ! 1c2 !'

Misol

Quyidagi misolda qidiruv shabloni quyidagicha: birinchi belgi - kichik harflar yoki defis '-', keyin ikkita 'x' harfi:

php<?php
  $str = 'axx Axx -xx @xx';
  $res = preg_replace('#[a-z-]xx#', '!', $str);
?>

Natijada o'zgaruvchiga quyidagi yoziladi:

php'! Axx ! @xx'

Misol

Quyidagi misolda qidiruv shabloni quyidagicha: birinchi belgi - kichik, katta harflar yoki defis '-', keyin ikkita 'x' harfi:

php<?php
  $str = 'axx Axx -xx @xx';
  $res = preg_replace('#[a-zA-Z-]xx#', '!', $str);
?>

Natijada o'zgaruvchiga quyidagi yoziladi:

php'! ! ! @xx'

Misol

Defisni ikkita guruh orasiga joylashtirish mumkin - u erda u aniq yana bitta guruh yaratmaydi:

php<?php
  $str = 'axx 9xx -xx @xx';
  $res = preg_replace('#[a-z-0-9]xx#', '!', $str);
?>

Natijada o'zgaruvchiga quyidagi yoziladi:

php'! ! ! @xx'

Amaliy vazifalar

Задание 1

Berilgan satr:

php<?php
  $str = 'xaz xBz xcz x-z x@z';
?>

Quyidagi shablon bo‘yicha barcha satrlarni toping: 'x' harfi, katta yoki kichik harf yoki defis, 'z' harfi.

Задание 2

Berilgan satr:

php<?php
  $str = 'xaz x$z x-z xcz x+z x%z x*z';
?>

Quyidagi shablon bo‘yicha barcha satrlarni toping: 'x' harfi, keyin dollar, yoki defis yoki ortiqcha belgi, keyin 'z' harfi.