Предполагам че на всеки, който пише код рано или късно му се налага да парсва низове. В случай че низът не е нещо кратко, точно и ясно, се налага използването на regex. В различните езици регулярни изрази се ползват по различен начин. Общото е че върху изследвания низ се налага шаблон и според това дали низът попада в шаблона (match-ва) се предприемат някакви действия или части от низа се прехвърлят в други променливи. В Perl това става лесно – има си езикова конструкция:
-
-
$string = "The lazy dog jumped over the quick brown fox.";
-
if ($string =~ /(\w{3}\./){
-
$match = $1;
-
do_something_on($match);
-
}
-
Кракто и ясно – ако низът попада в /шаблон/ – да се направи еди какво си. Няма да се спирам точно върху синтаксиса на шаблоните, понеже самия факт че четете това тук предполага че сте на ясно 
Все пак ако не сте на ясно, ето ви един плашещ шаблон, за да се откажете още тук:
/^([\d\.]+?)\skill\s+(\d+)\s+([\w\s]+?)(\d+?)\s+([\w\s]+?)\w+$/
Това използвам за парсване на тези редове от логовете на Unreal Tournament:
175.48 kill 1 Sniper Rifle 5 Sniper Rifle Decapitated
В PHP няма езикова конструкция, но има доста функции за Perl Compatible Regular Expressions, които работят на същия принцип.
Сега да видим как е положението в С.
От много време търсех как мога да ползвам регулярни изрази, но все удрях на камък. Когато ми се е налагало да парсвам низове съм ползвал sscanf или разбиване на символи, броене, чакане Х-тия символ да е точно ‘А’, Y-тия да е точно ‘B’ и т.н. Неприятна работа включваща жонглиране с цикли, if-ове, strcmp и двадесет нива индентация на кода.
Днес открих че в С има поддръжка на PCRE и ми се дощя да се самоубия 
Ако работите на нормална операционна система, то може да видите много информация с man pcre и man pcreapi. Ако сте наистина щастливци, някъде из дистрибуцията ще имате файл pcredemo.c, който нагледно показва как се работи с PCRE функциите.
Ако не сте от тези щастливци можете да си намерите файла от тук.
Използват се две основни функции: pcre_compile и pcre_exec. Първата поема съставения шаблон от потребителски низов вид и го превръща във вътрешното представяне, което компилатора използва. Втората функция налага шаблона върху тествания низ и връща съвпаденията във вид на масив от вектори, сочещи началните позиции на съвпаденията. Можете да прочетете за функциите в съответните man страници. И най-добре вижте pcredemo.c