Рекомендуемый метод для тестирования регулярных выражений?

Другая причина использовать Схему для проверки против состоит в том, что, в то время как узлы XML явно заказаны, атрибуты XML не.

Так Ваше сравнение строк:

Assert.AreEqual(myDoc.OuterXML(),"big string of XML")

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

7
задан Roberto Rosario 7 October 2009 в 04:06
поделиться

10 ответов

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

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

3
ответ дан 6 December 2019 в 07:07
поделиться

Попробуйте YAPE :: Regex :: Explain для 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
----------------------------------------------------------------------
7
ответ дан 6 December 2019 в 07:07
поделиться

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

5
ответ дан 6 December 2019 в 07:07
поделиться

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

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

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

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

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

4
ответ дан 6 December 2019 в 07:07
поделиться

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

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

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

2
ответ дан 6 December 2019 в 07:07
поделиться

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

#!/usr/bin/perl

$mystring = "My cat likes to eat tomatoes.";
$mystring =~ s/cat/dog/g;
print $mystring;
1
ответ дан 6 December 2019 в 07:07
поделиться

Также ознакомьтесь с прагмой 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
ответ дан 6 December 2019 в 07:07
поделиться

Если вы собираетесь купить инструмент, Komodo от ActiveState - отличный редактор для языков сценариев, который поставляется с могучий прекрасный помощник по регулярным выражениям. Это кроссплатформенный, но не бесплатный. Это помогло мне выйти из нескольких трудных ситуаций, когда я не совсем понимал, почему что-то не анализировалось, и поддерживает несколько типов разновидностей регулярных выражений.

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

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

0
ответ дан 6 December 2019 в 07:07
поделиться

Если вы намерены просто дать другой Фон Границе. Вы можете добиться этого в ControlTemplate.

0
ответ дан 6 December 2019 в 07:07
поделиться

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

1
ответ дан 6 December 2019 в 07:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: