Регулярные выражения – одно из моих слабых мест, думаю будет разумно собрать все в кучу, и периодически обновлять новыми. Итак:
Вытащить расширение файла
echo preg_replace("/.*?\./", '', 'file.txt'); // получим txt
Получить все, что находится между тегами
$str='<tag>some text</tag><tag>some text2</tag>'; $str2 = preg_match('|<tag.*>(.*)</tag>|sei', $str, $res); echo $res[1]; // получим some text
Получить все, что находится между тегами (жадный вариант: вытащит все, до последнего совпадения)
$str='<tag>some text</tag><tag>some text2</tag>'; $str2 = preg_match('|<tag.*?>(.*)</tag>|sei', $str, $res); echo $res[1]; // получим some text</tag><tag>some text2
Найти текст между тегами, и “обвернуть” текст другим тегом
$str='<tag>text</tag>'; echo preg_replace("!<tag>(.*?)</tag>!si","<tag2>\\1</tag2>",$str);
Проверка: число / не число
$var='fdd'; if (!preg_match("|^[\d]+$|", $var)) { echo 'НЕ число!'; } else { echo 'число!'; }
переменная может содержать только русс. / лат. символы, пробел, цифры, знак _
$var='text@'; if (preg_match("/[^(\w)|(\x7F-\xFF)|(\s)]/",$var)) { die( "переменная содержит недопустимые символы!" ); }
валидность email адреса
$email='text'; if (preg_match("/[^(\w)|(\@)|(\.)|(\-)]/",$email)) { die( "это не email"); }
Является ли значение переменной строкой, состоящей из символов латиницы и имеющая длину до 10 символов
$str='fghh'; if (ereg("^[A-Za-z]{1,10}$",$str)) echo "Это строка из символов латиницы не более 10 символов";
небольшие правки позволят расширить диапазон набора символов
$str='fghh'; if (ereg("^[A-Za-zА-Яа-яЁё0-9]{1,10}$",$str)) echo "Это строка из лат., рус. и цифр не более 10 символов";
Проверка есть ли в строке не менее 3-х одинаковых символов подряд
$string='теккккст'; if (preg_match("/(.)\\1\\1/",$string)) echo "yes"; else echo "no";
обрезание лишних пробелов
$string = 'слово было три пробела'; echo $string=preg_replace("/ +/"," ",$string);
обрезание повторяющихся знаков препинания, если их более трех
$string = preg_replace('#(\.|\?|!|\(|\)){3,}#', '\1\1\1', $text);
замена ссылок в виде http://site.ru на кликабельную ссылку
$str = 'текст со ссылкой http://blog.ozim.studio'; echo $str = preg_replace('#(?$0', $text);
замена одного на другое, я так смайлы парсил в скрипте чата )
$find=array(':)', ':D', ':('); $replace = array('<img src="smiles/ab.gif">','<img src="smiles/ag.gif">', '<img src="smiles/ac.gif">'); $value = str_replace($find, $replace, 'привет :)'); echo $value;
ищем совпадение в строке
if (!preg_match("/php/i", "PHP is the web scripting language of choice.")) { //если нет совпадения "php" в строке "PHP is the web scripting language of choice." echo "A match was not found."; // то выводим что его нет } else { echo "A match was found."; }
Пропускаем только русские буквы, пробел и знак –
setlocale (LC_ALL, 'ru_RU'); if (preg_match("/[^а-яА-ЯёЁ -]/i",$var)) { die ('используйте только буквы русского алфавита пробел и тире.'); }
Большая часть выражений взята с сайта http://htmlweb.ru/ и переделана ( не люблю копипаста)
Буду рад, если кто привнесет полезные регулярные выражения в коллекцию :) + сам буду дописывать, по мере столкновения с новыми.

Вроде наборчик ничего.
Только список явно маловат.
Надо добавить.
я не против, в студию то, что можно добавить.
Парсер всех внешних и внутренних ссылок со страницы
В массиве $vnut только ссылки внутренние, в массиве $vnech только внешние ссылки.
$html=file_get_contents (‘http://www.popsu.net’);
$url=’popsu.net’;
$vnut=array();
$vnech=array();
preg_match_all(‘~<a [^]*href=[\'”]([^\'”]+)[\'”][^]*>(((?!~si’,$html, $matches);
foreach ($matches[1] as $val) {
if (!preg_match(“~^[^=]+://~”, $val) || preg_match(“~^[^://]+://(www\.)?”.$url.”~i”, $val)) { $vnut[]=$val; }
else $vnech[]=$val;
}
$vnut=array_unique ($vnut);
$vnech=array_unique ($vnech);
print_r ($vnut);
print_r ($vnech);
Является ли строка числом, длиной до 80 цифр:
if (preg_match(“/^[0-9]{1,80}$/”,$string)) echo “ДА”;
Состоит ли строка только из букв, цифр и “_”, длиной от 8 до 20 символов:
if ( ! preg_match(“/[^a-zа-я0-9_]/”,$string))
echo “нет посторонних букв (OK)”;
else
echo “есть посторонние буквы (FALSE)”;
Проверка URL на корректность
function pregtrim($str) {
return preg_replace(“/[^\x20-\xFF]/”,””,@strval($str));
}
//
// проверяет URL и возвращает:
// * +1, если URL пуст
// if (checkurl($url)==1) echo “пусто”
// * -1, если URL не пуст, но с ошибками
// if (checkurl($url)==-1) echo “ошибка”
// * строку (новый URL), если URL найден и отпарсен
// if (checkurl($url)==0) echo “все ок”
// либо if (strlen(checkurl($url))>1) echo “все ок”
//
// Если протокола не было в URL, он будет добавлен (“http://”)
//
function checkurl($url) {
// режем левые символы и крайние пробелы
$url=trim(pregtrim($url));
// если пусто – выход
if (strlen($url)==0) return 1;
//проверяем УРЛ на правильность
if (!preg_match(“~^(?:(?:https?|ftp|telnet)://(?:[a-z0-9_-]{1,32}”.
“(?::[a-z0-9_-]{1,32})?@)?)?(?:(?:[a-z0-9-]{1,128}\.)+(?:com|net|”.
“org|mil|edu|arpa|gov|biz|info|aero|inc|name|[a-z]{2})|(?!0)(?:(?”.
“!0[^.]|255)[0-9]{1,3}\.){3}(?!0|255)[0-9]{1,3})(?:/[a-z0-9.,_@%&”.
“?+=\~/-]*)?(?:#[^ ‘\”&<>]*)?$~i”,$url,$ok))
return -1; // если не правильно – выход
// если нет протокала – добавить
if (!strstr($url,”://”)) $url=”http://”.$url;
// заменить протокол на нижний регистр: hTtP -> http
$url=preg_replace(“~^[a-z]+~ie”,”strtolower(‘\’)”,$url);
return $url;
}
Пропускаем только русские буквы, пробел и знак – это пригодилось
отпиши на мыло когда ответишь об этом
есть два поля в форме, нужно проверить так их оба, только одно из них может быть и пустым ? парюсь уже целый вечер
а причем тут регулярные выражения?
а причем тут регулярные выражения?
так я отправляю форму через пост, а затем надо отпарсить ими – проверить поля на символы , я уже использую, только мне надо в одну строчку запихнуть чтобы прверяло поля, причем одно из них всегда заполнено, а другое может быть заполнено, а может быт пустым.