﻿id	summary	reporter	owner	description	type	status	priority	component	resolution	keywords	cc
554	РЭ: ошибки в примерах регулярных выражений	alx	Vladimir	"В РЭ аппаратуры MC04-DSL-3U редакции 40 в таблице 7.1 на странице 195 даны некоторые примеры регулярных выражений с комментариями. К сожалению, некоторые из них содержат ошибки.

`^537$»`  Символ доллара в регулярном выражении совпадает с концом строки, что означает, что после предыдущего символа 7 никаких других символов в номере быть не должно. Однако далее в регулярном выражении стоит символ закрывающих кавычек, который требует, чтобы этот символ был в номере после символа 7. Как результат этого противоречия, такое регулярное выражение никогда не будет совпадать ни с одной строкой. Предполагаю, что символ '»' в регулярное выражение добавлен по ошибке и предлагаю его убрать.

`.{4}»` В описании этого примера написано: ""4 любых символа, например, 123#"". Это не совсем так: данное регулярное выражение требует, чтобы после любых четырех символов непременно следовал символ '»'. Например оно будет совпадать со строками `Станция «Мир»`, `1234»лабуда`, но не будет совпадать со строками `Навальный` или `Путин`, хотя в последних имеется четыре символа. Предлагаю либо добавить в описание примера уточнение "", за которыми следует символ '»'"", либо убрать символ '»' из регулярного выражения.

`^2\d{6}` В описании этого примера сказано: ""номер длиной не менее 7 цифр и начинается с цифры 2"". Описание не совсем точное, так как не очень внимательный читатель может понять его как ""любое число цифр, но не менее 7, начинающийся с 2"", хотя на самом деле после 7 цифр могут следовать любые символы, что верно показано в примере далее. Предлагаю переформулировать описание примерно так: ""номер, начинающийся с цифры 2, за которой следуют 6 любых цифр, за которыми могут следовать любые другие символы"".

`^(?![3,4]0\d{2})\d*` С этим примером сразу несколько проблем. Во-первых, оно оканчивается на `\d*`, что означает любое количество цифр (включая нулевое). Но, так как в регулярном выражении нет символа '$' (конец строки), после этих цифр строка может содержать любые другие символы, в том числе и опять цифры! Таким образом, фрагмент `\d*` в данном выражении не имеет никакого эффекта, и может быть удален. Поэтому предлагаю не учить читателя плохому, а сразу удалить этот фрагмент из примера, сделав пример более простым для чтения и понимания: `^(?![3,4]0\d{2})`. Во-вторых, в описании к примеру написано: ""принимает все вызовы кроме номеров начинающихся на 30хх, 40хх"". Это неверно. Как раз `30xx` и `40xx` будут приниматься (совпадают с регулярным выражением), потому что данное регулярное выражение имеет следующий смысл: //совпадает со всем кроме начинающегося с одного из символов ""три"" ('3'), ""запятая"" (',') или ""четыре"" ('4'), за которым следует символ '0', за которым следуют две любые цифры//. Символ же 'x' цифрой не является. Да, я догадался, что под символом 'x' подразумевалась цифра, но у читателя, незнакомого с регулярными выражениями (а иначе ему не нужен этот раздел), оснований для такой догадки нет, и он будет воспринимать все написанное буквально! Предлагаю приведенную мной формулировку и записать в качестве пояснения. И привести такие примеры: ""Например не будут приниматься вызовы номеров '3074', ',039', '4081'"".

`^[3,4]0\d{2}$` В описании написано: ""принимает вызовы только на номера вида 30хх, 40хx"". Здесь в описании та же проблема, что и в предыдущем примере. Предлагаю переформулировать описание примерно так: принимает только вызовы номеров, начинающихся с одного из символов ""три"" ('3'), ""запятая"" (',') или ""четыре"" ('4'), второй символ которых ""ноль"" ('0'), за которым следует ровно две любые цифры. Например '3074', ',039', '4081'.

`/^2(\d{6})/83422\1` Во-первых, стоит, наверное, во вводной части уточнить, что ряд конфигурационных параметров поддерживает специальную форму записи - регулярное выражение с заменой, иначе неискушенный читатель подумает, что такая форма - часть синтаксиса PCRE. На самом деле это не так, такая форма записи - наше собственное изобретение. Во-вторых, в описании к примеру написано: ""номер из 7 цифр, начинающийся с цифры 2"". Это не совсем точно. Более точным будет ""из 7 цифр, за которыми могут следовать любые символы""."	дефект	closed	major	Руководство по эксплуатации	готово		
