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
и тн.