Opened 5 years ago

Last modified 22 months ago

#554 closed дефект

РЭ: ошибки в примерах регулярных выражений — at Initial Version

Reported by: alx Owned by: Vladimir
Priority: major Component: Руководство по эксплуатации
Keywords: Cc:

Description

В РЭ аппаратуры 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 цифр, за которыми могут следовать любые символы". Далее же текст "к номеру добавляется префикс '8342'" следует дополнить: "и из номера удаляются все символы кроме первых семи" (так как только цифры номера со 2-й по 7-ю добавляются к комбинации '83422' в правой части).

Change History (0)

Note: See TracTickets for help on using tickets.