Расшифровка регулярного выражения в Perl - PullRequest
0 голосов
/ 02 февраля 2012

Может кто-нибудь расшифровать, что означает это регулярное выражение на Perl:

Ответы [ 3 ]

3 голосов
/ 02 февраля 2012

Для этого есть инструмент: YAPE :: Regex :: Explain

The regular expression:

(?-imsx:([0-9a-zA-Z\-]+(?:'[a-zA-Z0-9\-]+)*))

matches as follows:

NODE                     EXPLANATION
----------------------------------------------------------------------
(?-imsx:                 group, but do not capture (case-sensitive)
                         (with ^ and $ matching normally) (with . not
                         matching \n) (matching whitespace and #
                         normally):
----------------------------------------------------------------------
  (                        group and capture to \1:
----------------------------------------------------------------------
    [0-9a-zA-Z\-]+           any character of: '0' to '9', 'a' to
                             'z', 'A' to 'Z', '\-' (1 or more times
                             (matching the most amount possible))
----------------------------------------------------------------------
    (?:                      group, but do not capture (0 or more
                             times (matching the most amount
                             possible)):
----------------------------------------------------------------------
      '                        '\''
----------------------------------------------------------------------
      [a-zA-Z0-9\-]+           any character of: 'a' to 'z', 'A' to
                               'Z', '0' to '9', '\-' (1 or more times
                               (matching the most amount possible))
----------------------------------------------------------------------
    )*                       end of grouping
----------------------------------------------------------------------
  )                        end of \1
----------------------------------------------------------------------
)                        end of grouping
----------------------------------------------------------------------
3 голосов
/ 02 февраля 2012

Вот разбивка регулярного выражения:

(                     # start a capturing group (1)
   [0-9a-zA-Z-]+      # one or more digits or letters or hyphens
   (?:                # start a non-capturing group
      '               # a literal single quote character
      [a-zA-Z0-9-]+   # one or more digits or letters or hyphens
   )*                 # repeat non-capturing group zero or more times
)                     # end of capturing group 1

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

2 голосов
/ 02 февраля 2012

Ф.Дж. ответ - идеальная разбивка. Но ... он пропустил важную часть, которая / г в конце. Он говорит парсеру продолжить с того места, где он остановился в прошлый раз. Таким образом, цикл while будет продолжать циклически повторять строку, пока не получит точку, в которой нет других совпадающих точек.

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