Рекомендуемый метод для проверки регулярных выражений? - PullRequest
7 голосов
/ 07 октября 2009

Я новичок в регулярных выражениях, я смог написать несколько проб и ошибок, поэтому попробовал несколько программ, чтобы помочь мне написать выражение, но программы было сложнее понять, чем сами регулярные выражения. Любые рекомендуемые программы? Я делаю большую часть своего программирования под Linux.

Ответы [ 11 ]

7 голосов
/ 07 октября 2009

Попробуйте YAPE :: Regex :: Объясните для Perl:

#!/usr/bin/perl

use strict;
use warnings;

use YAPE::Regex::Explain;

print YAPE::Regex::Explain->new(
    qr/^\A\w{2,5}0{2}\S \n?\z/i
)->explain;

Выход:

The regular expression:

(?i-msx:^\A\w{2,5}0{2}\S \n?\z)

matches as follows:

NODE                     EXPLANATION
----------------------------------------------------------------------
(?i-msx:                 group, but do not capture (case-insensitive)
                         (with ^ and $ matching normally) (with . not
                         matching \n) (matching whitespace and #
                         normally):
----------------------------------------------------------------------
  ^                        the beginning of the string
----------------------------------------------------------------------
  \A                       the beginning of the string
----------------------------------------------------------------------
  \w{2,5}                  word characters (a-z, A-Z, 0-9, _)
                           (between 2 and 5 times (matching the most
                           amount possible))
----------------------------------------------------------------------
  0{2}                     '0' (2 times)
----------------------------------------------------------------------
  \S                       non-whitespace (all but \n, \r, \t, \f,
                           and " ")
----------------------------------------------------------------------
                           ' '
----------------------------------------------------------------------
  \n?                      '\n' (newline) (optional (matching the
                           most amount possible))
----------------------------------------------------------------------
  \z                       the end of the string
----------------------------------------------------------------------
)                        end of grouping
----------------------------------------------------------------------
5 голосов
/ 07 октября 2009

RegexPal - отличный бесплатный тестер JavaScript для регулярных выражений. Поскольку он использует механизм регулярных выражений JavaScript, у него нет некоторых более продвинутых функций регулярных выражений, но он работает довольно хорошо для многих регулярных выражений. Особенность, по которой я скучаю больше всего, - это утверждения за кадром.

4 голосов
/ 07 октября 2009

Большинство ошибок в регулярных выражениях делятся на три категории:

  • Скрытые пропуски - пропуская '^' в начале или '$' в конце, используя '*', где вы должны были использовать + '- это всего лишь ошибки новичка, но для глючного регулярного выражения обычно все же проходят все автоматизированные тесты.

  • Случайный успех - когда часть регулярного выражения является совершенно неправильной и обречена на неудачу в 99% использования в реальном мире, но по чистой глупой удаче ей удается пройти полдюжины автоматизированные тесты, которые вы написали.

  • Слишком большой успех - когда одна часть регулярного выражения соответствует намного большему, чем вы думали. Например, токен [^., ]* также будет соответствовать \r и \n, что означает, что ваше регулярное выражение теперь может соответствовать нескольким строкам текста, даже если вы завернули его в ^ и $.

На самом деле нет замены для правильного изучения регулярных выражений. Прочтите справочное руководство по вашему движку regex и используйте инструмент, такой как Regex Buddy, чтобы экспериментировать и знакомиться с всеми функциями, и особенно обращать внимание на любое особое или необычное поведение, которое они могут демонстрировать. Если вы выучите регулярные выражения правильно, вы избежите большинства ошибок, упомянутых выше, и вы будете знать, как написать небольшое количество автоматизированных тестов, которые могут гарантировать все крайние случаи без чрезмерного тестирования очевидных вещей (действительно [A-Z] сопоставлять каждую букву между A и A? Я бы лучше написал 26 вариантов модульного теста, чтобы убедиться!).

Если вы не выучите регулярные выражения полностью, вам нужно написать нелепое количество автоматических тестов, чтобы доказать, что ваше магическое регулярное выражение верно.

3 голосов
/ 07 октября 2009

К сожалению, если вы используете Linux, у вас не будет доступа к одному из лучших из них: Regex Buddy .

RegexBuddy - ваш идеальный компаньон для работы с регулярными выражениями. Легко создавать регулярные выражения, которые точно соответствуют тому, что вы хотите. Четко понимать сложные регулярные выражения, написанные другими. Быстро протестируйте любое регулярное выражение на образцах строк и файлов, предотвращая ошибки на реальных данных. Отладка без догадок путем пошагового прохождения самого процесса сопоставления. Используйте регулярные выражения с фрагментами исходного кода, автоматически адаптированными к особенностям вашего языка программирования. Собирайте и документируйте библиотеки регулярных выражений для последующего повторного использования. GREP (поиск и замена) через файлы и папки. Интегрируйте RegexBuddy с вашими любимыми инструментами поиска и редактирования для мгновенного доступа. (с их сайта)

2 голосов
/ 07 октября 2009

Отличной программой для написания регулярных выражений будет Perl ; Вы можете попробовать регулярное выражение, чтобы убедиться, что оно очень легко совпадает:

perl -e 'print "yes!\n" if "string" =~ /regex to test/'

См. этот вопрос о регулярных выражениях модульного тестирования для получения дополнительной информации о тестировании регулярных выражений в целом.

1 голос
/ 22 сентября 2011

Мой личный фаворит Рубуляр (отказ от ответственности: онлайн-инструмент).

Это красиво, просто и довольно быстро.

1 голос
/ 10 декабря 2009

http://regex -test.com - это действительно хороший / профессиональный веб-сайт, который позволяет тестировать множество различных типов регулярных выражений.

1 голос
/ 07 октября 2009

Также проверьте re прагму , которая покажет, как скомпилированы регулярные выражения и как они выполняются:

$ perl -Mre=debugcolor -e '"huzza" =~ /^(hu)?z{1,2}za$/'

Вывод:

    Compiling REx "^(hu)?z{1,2}za$"
    Final program:
       1: BOL (2)
       2: CURLYM[1] {0,1} (12)
       6:   EXACT  (10)
      10:   SUCCEED (0)
      11: NOTHING (12)
      12: CURLY {1,2} (16)
      14:   EXACT  (0)
      16: EXACT  (18)
      18: EOL (19)
      19: END (0)
    floating "zza"$ at 0..3 (checking floating) anchored(BOL) minlen 3 
    Guessing start of match in sv for REx "^(hu)?z{1,2}za$" against "huzza"
    Found floating substr "zza"$ at offset 2...
    Guessed: match at offset 0
    Matching REx "^(hu)?z{1,2}za$" against "huzza"
       0           |  1:BOL(2)
       0           |  2:CURLYM[1] {0,1}(12)
       0           |  6:  EXACT (10)
       2           | 10:  SUCCEED(0)
                                        subpattern success...
                                      CURLYM now matched 1 times, len=2...
                                      CURLYM trying tail with matches=1...
       2           | 12:  CURLY {1,2}(16)
                                        EXACT  can match 2 times out of 2...
       3           | 16:    EXACT (18)
       5           | 18:    EOL(19)
       5           | 19:    END(0)
    Match successful!
    Freeing REx: "^(hu)?z{1,2}za$"
1 голос
/ 07 октября 2009

Вы можете попробовать использовать веб-сайты, которые дают вам подсказки и мгновенное удовлетворение, например этот . Создание простого Perl-скрипта, который вы можете легко изменить, также является отличным полигоном для тестирования. Примерно так:

#!/usr/bin/perl

$mystring = "My cat likes to eat tomatoes.";
$mystring =~ s/cat/dog/g;
print $mystring;
0 голосов
/ 07 октября 2009

Kudos - отличный бесплатный кроссплатформенный отладчик регулярных выражений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...