Многим программистам знакома радость быстрого создания регулярных выражений, в наши дни часто с помощью какого-либо веб-сервиса, или, более традиционно, в интерактивном режиме, или, возможно, написания небольшого сценария, в котором регулярное выражение находится в стадии разработки, и набора тестовых примеров. , В любом случае процесс является итеративным и довольно быстрым: продолжайте взламывать загадочно выглядящую строку, пока она не совпадет и не захватит то, что вы хотите, и отклонит то, что вы не хотите.
Для простого случая результат может быть примерно таким, как регулярное выражение Java:
Pattern re = Pattern.compile(
"^\\s*(?:(?:([\\d]+)\\s*:\\s*)?(?:([\\d]+)\\s*:\\s*))?([\\d]+)(?:\\s*[.,]\\s*([0-9]+))?\\s*$"
);
Многие программисты также знают, что нужно редактировать регулярное выражение или просто кодировать регулярное выражение в устаревшей базе кода. С небольшим редактированием, чтобы разбить его на части, вышеприведенное регулярное выражение все еще очень легко понять любому, кто достаточно хорошо знаком с регулярными выражениями, и ветеран регулярного выражения должен сразу увидеть, что он делает (ответьте в конце поста, если кто-то захочет выполнить упражнение сами разберемся)
Однако для того, чтобы регулярное выражение стало действительно доступным только для записи, не нужно усложнять ситуацию, и даже при тщательной документации (что, конечно, каждый делает для всех сложных регулярных выражений, которые они пишут ...), изменение регулярного выражения становится сложная задача. Это также может быть очень опасной задачей, если регулярное выражение не проходит тщательное модульное тестирование (но каждый, конечно, имеет комплексные модульные тесты для всех своих сложных регулярных выражений , как положительных, так и отрицательных ...).
Итак, вкратце, есть ли решение / альтернатива для записи-чтения для регулярных выражений, не теряя своей силы? Как будет выглядеть приведенное выше регулярное выражение с альтернативным подходом? Любой язык хорош, хотя многоязычное решение было бы лучше, в той степени, что регулярные выражения являются многоязычными.
И затем, что делает более раннее регулярное выражение, так это: анализирует строку чисел в формате 1:2:3.4
, захватывая каждое число, где пробелы разрешены и 3
требуются только .