Копилка регулярных выражений
Проблема
Некоторые полезные регулярные выражения.
Решение
Римские цифры
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?)//);
Комментарий
См. также
Proverte kod v komentariyah gde pro list tam oshibki detskie
Оставить комментарий:
|
|