Рубрика «regexp» - 4

Здравствуйте читатели.

Не судите строго, я новичёк в linux-е и это мой первый пост на хабре, но может кому-то похожему на меня он окажется полезным.

Столкнулся с необходимостью решить задачу, описанную в заголовке. Готового решения не нашёл. Написал sh скрипт (cpexclude.sh), который сначала копирует всё, а потом удаляет лишнее:

#!/bin/bash
if [ $# -lt 3 ] ; then
	echo "cpexclude usage: pathFrom pathTo excludeRegex"
	exit 0
fi
pathFrom=$1
pathTo=$2
excludeRegex=$3
# Copy everything
echo `cp -a $pathFrom/. $pathTo`
# Delete by excludeRegex
echo `find $pathTo -regex $excludeRegex -delete`

Добавил его в ~/.bashrc

alias cpexclude='/path/to/cpexclude.sh'

Пользуюсь время от времени.
Читать полностью »

Часто получаешь в руки железку, нужно оценить, как она наконфигурена. При этом, размер running config может быть огромным (скажем, полный дамп конфига контроллера из моей лабы в данном примере 21KB ~=29 страниц). Для первого взгляда хочется увидеть, какие секции конфига присутствуют. В качестве примера взята платформа Motorola Solutions WING5 (WLAN), но, в принципе будет работать на любой железке, где конструкция "| include" поддерживает regexp (Cisco, Motorola WING4, другие IOS-подобные интерфейсы).
Читать полностью »

Это четвертый вебинар из цикла бесплатных вебинаров по автоматизации тестирования.
Видеозапись (продолжительность 1 час 10 мин.):

Темы и детали видеозаписи под катомЧитать полностью »

Российский разработчик Егор Хомяков сообщил об ещё одной массовой уязвимости в проектах на Ruby. Речь идёт об использовании ^ в начале строки и $ в конце строки регулярных выражений вместо A и z.

Дело в том, что ^ и $ в таких случаях воспринимается Ruby как новые строки (n), что открывает двери для инъекций.
Читать полностью »

Regular Expressions For All (REFA)

Основная идея

Существует множество систем для поиска подстрок отвечающих определенной маске. К сожалению они теряют свою мощь как только приходится учитывать многие факторы. Конструкции становятся громозкими, непонятными и трудноподдерживающими.
Именно для этого я попытался создать аналог – REFA. Регулярные выражения для всех.
Его идея в следующем. Как только регулярное выражение перестает быть очевидным – разбить его на два. Оптимизатор при возможности все равно сведет его в одно, таким образом в скорости потерь не будет, но зато код станет яснее.
Читать полностью »

В книге Дж.Фридла «Регулярные выражения» я наткнулся на то, что автор намекает не использовать компиляцию регулярных выражений для повседневных случаев и использовать только для критических, когда крайне важна скорость выполнения, особенно если выражение работает с большим объемом текста.

Аналогичное мнение наблюдается и в msdn.
Но так ли это?
Читать полностью »

Случилось мне задание: проверить, есть ли XML-имя правильным. Что может быть проще? Смотрим стандарт, где четко описано, какими символами может имя начинатся, а какими — продолжаться, все просто и понятно:

[4] NameStartChar ::= ":" | [A-Z] | "_" | [a-z] | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF] | [#x370-#x37D] | [#x37F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]
[4a] NameChar ::= NameStartChar | "-" | "." | [0-9] | #xB7 | [#x0300-#x036F] | [#x203F-#x2040]
[5] Name ::= NameStartChar (NameChar)*

Практически готовое регулярное выражение, легкая обработка напильником Ctrl+H…

    public const string NameStartCharPattern = @":|[A-Z]|_|[a-z]|[u00C0-u00D6]|[u00D8-u00F6]|[u00F8-u02FF]|[u0370-u037D]|[u037F-u1FFF]|[u200C-u200D]|[u2070-u218F]|[u2C00-u2FEF]|[u3001-uD7FF]|[uF900-uFDCF]|[uFDF0-uFFFD]|[u10000-uEFFFF]";
    public const string NameCharPattern = NameStartCharPattern + @"|-|.|[0-9]|u00B7|[u0300-u036F]|[u203F-u2040]";
    public const string NamePattern = @"(?:" + NameStartCharPattern + @")(?:" + NameCharPattern + @")*";
* This source code was highlighted with Source Code Highlighter.

Пишем тест…

Assert.That(Regex.Match("1a", Patterns.NamePattern), Is.False);
* This source code was highlighted with Source Code Highlighter.

Чисто, просто, понятно… Упал! Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js