Regex буюу Regular Expression
Regex буюу Regular Expression-ий талаарх тайлбар ба жишээ
Regular Expression-ийг халь мөлт ойлгосноосоо та бүгдтэй хуваалцъя.
Вебээ хийх явцад яалт ч үгүй сурсан нэг зүйл бол Regex буюу Regular Expression юм. Текст мэдээлэлтэй харьцах дараах тохиолдлуудад үүнийг хэрэглэхээс өөр аргагүй бололтой. Үүнд:
- Текстэд тодорхой тэмдэг эсвэл үг байгаа эсэхийг шалгах
- Текстээс хэрэгтэй хэсгээ хайж олох
- Текстийн зарим хэсгийг солих өөрчлөх
- Текстийг хэсэглэн хуваах
- Текстийн бүтцийг шалгах, жишээлбэл. цахим шуудангийн хаяг эсэх, утасны дугаар эсэх, веб хуудасны хаяг эсэх зэрэг.
Тийнхүү regex-ийг тойрч зугтах аргагүй болсон шалтгаан нь regex-ийг ашиглан гүйцэтгэж болох үйлдлийг гүйцэтгэдэг функцүүд PHP хэлний сүүлийн үеийн хувилбаруудад орхигдох болсон явдал юм.
Бичсэн Regular Expression-ээ шалгах, турших
"Regex tester" түлхүүр үгээр "гүүглэдэхэд" хангалттай олон тестерүүд олдох бөгөөд би хувьдаа myregextester.com сайтыг ашиглаж байна.
Regex-д ашиглагддаг тусгай тэмдэгтүүд
. * + - ? ^ \( [ ] ( ) | &
Бүлэг тэмдэгтүүдийг заах
"2012-06-01" маягийн текстээс оныг нь ялгаж авъя гэвэл
[0-9]{4}
гэж бичнэ. Энд [0-9] гэдэг нь 0-ээс 9 хүртэлх бүх тэмдэгт буюу цифрүүд гэсэн утгатай. Харин [a-z] гэвэл a-аас z хүртэлх бүх үсгүүд гэсэн үг. Хэрвээ [0-9-] гэвэл цифрүүд бас - тэмдгийг авах болно.
Харин
[^-]{4}
- хасахаас ялгаатай 4 тэмдэгтийг авах болно. Өөрөөр хэлбэл өмнөх хэвтэй адил үр дүнг гарна гэсэн үг. Хэрэв [^a-z] гэвэл a-z үсгүүдээс бусад тэмдэгтүүд гэсэн утгыг илэрхийлнэ.
Давтагдсан тэмдэгтүүдийг заах
? + ба * тэмдгүүдийг ашиглах ба харилцан адилгүй утгыг илэрхийлнэ. ? нь заасан тэмдэгт зөвхөн нэг удаа байх эсвэл огт байхгүйг илэрхийлнэ. Тэгвэл + нь нэг эсвэл үүнээс олон удаа гэсэн утгатай бол * нь хэдэн ч удаа байж болохыг заахаас гадна байхгүй байхыг зөвшөөрдөг.
2012-06-01 текстийн хувьд
[0-9]?
гэвэл
Array:
(
[0] => Array
(
[0] => 2
[1] => 0
[2] => 1
[3] => 2
[4] =>
[5] => 0
[6] => 6
[7] =>
[8] => 0
[9] => 1
[10] =>
)
)
харин
[0-9]+
гэвэл
Array:
(
[0] => Array
(
[0] => 2012
[1] => 06
[2] => 01
)
)
тохирлууд гарах ба
[0-9]*
хэвийн хувьд
Array:
(
[0] => Array
(
[0] => 2012
[1] =>
[2] => 06
[3] =>
[4] => 01
[5] =>
)
)
тохирол гарна.
Хэрэв заасан тэмдэгт тодорхой тооны удаа давтагдахыг заах бол {давтагдах тоо} эсвэл {давтагдах тооны минимум, давтагдах тооны максимум} командыг нэмж өгнө.
[0-9]{4}
хэвийг авбал
Array:
(
[0] => Array
(
[0] => 2012
)
)
харин
[0-9]{2,4}
гэвэл
Array:
(
[0] => Array
(
[0] => 2012
[1] => 06
[2] => 01
)
)
үр дүн гарна.
Дурын тэмдэгт ба тэмдэгтүүдийг заах
Дурын ямар нэг тэмдэгтийг . цэгээр төлөөлүүлдэг. Харин дурын олон тэмдэгтийг дээр дурдсанчлан .+ эсвэл .* эсвэл .{тоо} эсвэл .{минимум тоо, максимум тоо} хэвүүдийн аль тохирохоор тодорхойлно.
Regex-ийн тусгай тэмдэгтүүдийг заах
Regex-нд түлхүүр үг маягаар ашиглагддаг тэмдэгтүүд байдгийг дээр дурдсан. Тэдгээрийг бүлэг тэмдэгт маягаар заах өөрөөр хэлбэл [] хаалт дотор бичихээс бусад үед урд нь налуу зураасыг бичиж өгдөг. Жишээ болгон image.jpg зургийн нэрнээс өргөтгөлийг нь цэгтэй нь хамтаар ялгаж авах хэвийг бичье гэвэл [.]jpg эсвэл .jpg гэж болно.
Дэд хэвүүдийг үүсгэх
image.jpg зургийн нэр ба өргөтгөл аль алийг нь ялгаж авах шаардлага гарсан гэе. Тэгвэл () дугуй хаалт ашиглан
([a-z]+)(.jpg)
хэвийг бичиж болох ба тохирол нь дараах маягтай байна.
Array:
(
[0] => Array
(
[0] => image.jpg
)
[1] => Array
(
[0] => image
)
[2] => Array
(
[0] => .jpg
)
)
Хувилбарт хэвийг үүсгэх
Файлын нэрсээс jpg, jpeg, png ба gif өргөтгөлүүдтэй зургийн файлын нэр ба өргөтгөлийг ялгаж авах хэвийг бичье. Иймэрхүү тохиолдолд | тэмдэгтийг ашиглаж болдог.
([a-z]+).(jpe?g|png|gif)
хэвийг
photo.jpg
image.jpeg
picture.png
logo.gif
archive.zip
текст дээр ажиллуулахад
Array:
(
[0] => Array
(
[0] => photo.jpg
[1] => image.jpeg
[2] => picture.png
[3] => logo.gif
)
[1] => Array
(
[0] => photo
[1] => image
[2] => picture
[3] => logo
)
[2] => Array
(
[0] => jpg
[1] => jpeg
[2] => png
[3] => gif
)
)
тохирол гарч байна.
Regex-ийн горимууд
Дараах дөрвөн горим байдаг юм байна.
- /i Үсгийн том жижгийг ялгахгүй
- /s Нэг мөртэй горим. Энэ горимд шинэ мөрийн эхлэлийг . цэгээр илэрхийлнэ.
- /m Олон мөрт горим. Энэ горимд ^ тэмдэгт мөрийн эхлэлийг \) долларын тэмдэг мөрийн төгсгөлийг заана.
- /x Хэв доторх сул зайг хэрэгсэхгүй.
Эдгээрээс жишээ болгон /i горимыг PHP хэлний хувьд хэрэглэж үзье.
<?php
$text = 'photo.jpg
image.JPEG
picture.png
logo.gif
archive.zip';
$pattern = '([a-z]+)\.(jpe?g|png|gif)';
$mode = '/i';
preg_match_all('/' . $pattern . $mode, $text, $matches);
print_r($matches);
?>
Үр дүн нь
Array
(
[0] => Array
(
[0] => photo.jpg
[1] => image.JPEG
[2] => picture.png
[3] => logo.gif
)
[1] => Array
(
[0] => photo
[1] => image
[2] => picture
[3] => logo
)
[2] => Array
(
[0] => jpg
[1] => JPEG
[2] => png
[3] => gif
)
)
гэж гарч байна.