LINUX.ORG.RU

История изменений

Исправление kaldeon, (текущая версия) :

Сравнение регулялок теоретически возможно реализовать.

Если в одном месте будет .*, а в другом .*(stage|stg).*, и оба значения должны содержать stage, то нужно сравнивать .* + stage = .*stage.* и .*(stage|stg).* + stage = .*stage.* (здесь в процессе может сгенерироваться длинное выражение, которое упрощается). Выражения эквивалентны. То есть мы превращаем выражение в такой вид, чтобы он учитывал возможные значения, указанные другим выражением. Похоже на то, что теоретически это тоже возможно.

Любой набор if (bool) return bool можно сократить в одно (большое и сложное) выражение при условии отсутствия промежуточного состояния. Можно сделать так и отправить в какой-нибудь сравниватель условных выражений. env!=foo && name==bar и name==bar && env!=foo эквивалентны.

В целом, для всего должны быть библиотеки, но вряд ли их будет много, вряд ли они будут написаны на одном языке и вряд ли они сразу заведуться в современном окружении. Про PCRE можно забыть. Про leftmost-first тоже.

Leftmost-first matching is difficult to explain.
When POSIX had to define the rules for regexps,
they chose to define them as leftmost-longest
even though all the implementations were leftmost-first,
because describing leftmost-first precisely was too
complex.

Всё это выглядит как довольно сложный, времязатратный проект для одного.

Исправление kaldeon, :

Сравнение регулялок теоретически возможно реализовать.

Если в одном месте будет .*, а в другом .*(stage|stg).*, и оба значения должны содержать stage, то нужно сравнивать .* + stage = .*stage.* и .*(stage|stg).* + stage = .*stage.* (здесь в процессе может сгенерироваться длинное выражение, которое упрощается). Выражения эквивалентны. То есть мы превращаем выражение в такой вид, чтобы он учитывал возможные значения, указанные другим выражением. Похоже на то, что теоретически это тоже возможно.

Любой набор if (bool) return bool можно сократить в одно (большое и сложное) выражение при условии отсутствия промежуточного состояния. Можно сделать так и отправить в какой-нибудь сравниватель условных выражений. env!=foo && name==bar и name==bar && env!=foo эквивалентны.

В целом, для всего должны быть библиотеки, но вряд ли их будет много и вряд ли они сразу заведуться в современном окружении. Про PCRE можно забыть. Про leftmost-first тоже.

Leftmost-first matching is difficult to explain.
When POSIX had to define the rules for regexps,
they chose to define them as leftmost-longest
even though all the implementations were leftmost-first,
because describing leftmost-first precisely was too
complex.

Всё это выглядит как довольно сложный, времязатратный проект для одного.

Исправление kaldeon, :

Сравнение регулялок теоретически возможно реализовать.

Если в одном месте будет .*, а в другом .*(stage|stg).*, и оба значения могут содержать stage, то нужно .* + stage = .*stage.* и .*(stage|stg).* + stage = .*stage.* (здесь в процессе может сгенерироваться длинное выражение, которое упрощается). Выражения эквивалентны. То есть мы превращаем выражение в такой вид, чтобы он учитывал возможные значения, указанные другим выражением. Похоже на то, что теоретически это тоже возможно.

Любой набор if (bool) return bool можно сократить в одно (большое и сложное) выражение при условии отсутствия промежуточного состояния. Можно сделать так и отправить в какой-нибудь сравниватель условных выражений. env!=foo && name==bar и name==bar && env!=foo эквивалентны.

В целом, для всего должны быть библиотеки, но вряд ли их будет много и вряд ли они сразу заведуться в современном окружении. Про PCRE можно забыть. Про leftmost-first тоже.

Leftmost-first matching is difficult to explain.
When POSIX had to define the rules for regexps,
they chose to define them as leftmost-longest
even though all the implementations were leftmost-first,
because describing leftmost-first precisely was too
complex.

Всё это выглядит как довольно сложный, времязатратный проект для одного.

Исходная версия kaldeon, :

Сравнение регулялок теоретически возможно реализовать.

Если в одном месте будет .*, а в другом .*(stage|stg).*, и оба значения могут содержать stage, то нужно .* + stage = .*stage.* и .*(stage|stg).* + stage = .*stage.* (здесь в процессе может сгенерироваться длинное выражение, которое упрощается). Выражения эквивалентны. То есть мы превращаем выражение в такой вид, чтобы он учитывал возможные значения, указанные другим выражением. Похоже на то, что теоретически это тоже возможно.

Любой набор if (bool) return bool можно сократить в одно (большое и сложное) выражение при условии отсутствия промежуточного состояния. Можно сделать так и отправить в какой-нибудь сравниватель условных выражений. env!=foo && name==bar и name==bar && env!=foo эквивалентны.

В целом, для всего должны быть библиотеки, но вряд ли их будет много и вряд ли они сразу заведуться в современном окружении. Про PCRE можно забыть. Про leftmost-first тоже.

Leftmost-first matching is difficult to explain.
When POSIX had to define the rules for regexps,
they chose to define them as leftmost-longest
even though all the implementations were leftmost-first,
because describing leftmost-first precisely was too
complex.

Я слышал, что leftmost-longest концептуально проще, чем leftmost-first. По этой причине sed реализует leftmost-longest.

В целом, всё это выглядит как довольно сложный, времязатратный проект для одного.