Копилка регулярных выражений

Проблема

Некоторые полезные регулярные выражения.

Решение

Римские цифры
m/^m*(d?c{0,3}|c[dm])(1?x{0,3}|x[1c])(v?i{0,3}|i[vx])$/i
Перестановка двух первых слов
s/(\S+)(\s+)(\S+)/$3$2$1/
Ключевое слово = значение
m/(\w+)\s*=\s*(.*)\s*$/ # Ключевое слово в $1, значение - в $2
Строка содержит не менее 80 символов
m/.{80,}/
ММ/ДД/ГГ ЧЧ:ММ:СС
m|(\d+)/(\d+)/\d+) (\d+):(\d+):(\d+)|
Смена каталога
s(/usr/bin)(/usr/local/bin)g
Расширение служебных последовательностей %7Е (шестн.)
s/%([0-9A-Fa-f][0-9A-Fa-f])/chr hex 41/ge
Удаление комментариев С (не идеальное)
s{
/\*   # Начальный ограничитель
.*?   # Минимальное количество символов
\*/   # Конечный ограничитель
} []gsx
Удаление начальных и конечных пропусков
s/^\s+//
s/\s+$//
Преобразование символа \ и следующего за ним n в символ перевода строки
s/\\n/\n/g
Удаление пакетных префиксов из полностью определенных символов
s/^.*:://
IP-адрес
m/^[01]?\d\d|2[0-4]\d|25[0-5])\.([01]?\d\d|2[0-4]\d|25[0-5])\.
([01]?\d\d|2[0-4]\d|25[0-5])\.([01]?\d\d|2[0-4]\d|25[0-5])$/
Удаление пути из полного имени файла
s(^.*/)()
Определение ширины строки с помощью TERMCAP
$cols = ( ($ENV{TERMCAP} || " ") =~ m/:co#(\d+):/ ) ? $1 : 80
Удаление компонентов каталогов из имени программы и аргументов
($name = join(" ", map { s,^\S+/,,; $_ } ($0 @ARGV))
Проверка операционной системы
die "This isn't Linux" unless $^0 =~m/linux/i;
Объединение строк в многострочных последовательностях
s/\n\s+/ /g;
Извлечение всех чисел из строки
@nums = m/(\d+\.?\d*|\.\d+)/g;
Поиск всех слов, записанных символами верхнего регистра
@capwords = m/(\b[^\Wa-z0-9_]+\b)/g;
Поиск всех слов, записанных символами нижнего регистра
@capwords = m/(\b[^\WA-Z0-9_]+\b)/g:
Поиск всех слов, начинающихся с буквы верхнего регистра
@icwords = m/(\b[^\Wa-z0-9_][^\WA-Z0-9_]*\b)/;
Поиск ссылок в HTML-документах
$links  = m/<A[^>]+?HREF\s*=\s*[“’]?([^’” >]+?)[ ‘”]?>/sig;
Поиск среднего инициала в $_
$initial = m/^\S+\s+(\s)\S*\s+\S/ ? $1 : "";
Замена кавычек апострофами
s/"([^"]*)"/’’$1’’/g
Выборка предложений (разделитель — два пробела)
{ local $/ = "";
  while (<>) {
    s/\n/ /g;
    s/ {3,}/ /g;
    push @sentences, m/(\S.*?[!?.])(?= |\Z)/g;
  }
}
ГГГГ-ММ-ДД
m/(\d{4})-(\d\d)-(\d\d)/  # ГГГГ в $1, MM в $2 и ДД в $3
Выборка строк независимо от терминатора (завершающего символа)
push(@lines, $1)
while ($input =~ s/^([^\012\015]*)(\012\015?|\015\012?)//);

Комментарий

См. также




2013-09-10 17:05:19

Proverte kod v komentariyah gde pro list tam oshibki detskie




Оставить комментарий:
Ваше Имя:
Email:
Антибот: *  
Ваш комментарий: