Some people, when confronted with a problem, think “I know, I'll use regular expressions.”
Now they have two problems.
a мачва символа a. мачва всеки символsasa мачва стринга sasa[abc] мачва един символ, който е измежду a, b и c (това се нарича клас)[a-zA-Z] мачва един която и да е английска буква\w мачва буква, цифра или _\d мачва цифра (като [0-9])\s мачва какъквто и да е whitespace (интервали, нови редове, табулации)(baba|sasa) мачва думата baba или думата sasa (това се нарича група)Важат за непосредствено предхождащия ги символ/клас/група. Нека го означим с x.
x* e нула или повече повторения на x.x+ e едно или повече повторения на x.x? e нула или едно повторение на x.x{m,n} означава между m и n повторения на x, като можем да пропуснем единия край ако искаме ({m,} или {,n})+, *, {m,n} са greedy - тоест ще поемат колкото се може повече символи - можем да ги накараме да искат минимален брой символи като сложим ? след тях[^abc] е всеки символ различен от a, b и c^ е началото на стринга, $ е краят (те са с дължина 0)\b е граница между дума и недума (пак с дължина 0)(sa|ba)_\1 тук \1 мачва каквото е мачнала първата група тоест цялото ще е sa_sa или ba_ba(?:sad) слагането на ?: кара групата да не се индексира (за примера по-горе и други ситуации)ba(?=ba) се нарича lookahead - това ще мачне ba, само когато е следвано от още едно ba(?<=ba)ba се нарича lookbehind - аналогично - само когато преди него е имало ba! вместо = в последните две получаваме негативни look(ahead|behind) - мачва само когато условието не е изпълнено/sasa//sasa/i - i се нарича флаг^ и $ мачват и начало и край на ред вместо само на целия стринг"baba".match(/BabA/i), PHP: preg_match("/BabA/i", "baba")$1, $2 и тн.