Понимание критериев регулярных выражений в сопоставлении с образцом - PullRequest
1 голос
/ 31 августа 2009

Я пытаюсь определить, какие следующие критерии соответствия шаблону я могу ввести:

\s*([\w\.-]+)\s*=\s*('[^']*'|"[^"]*"|[^\s]+)

Из моей попытки расшифровать (взглянув на регулярное выражение, которое я действительно понимаю) кажется, что я могу начать с любой последовательности символов, затем у меня должна быть фигурная скобка, за которой следуют буквенно-цифровые цифры, затем другая последовательность, за которой следуют фигурные скобки, одна начальная одиночная кавычка , нет обратной косой черты, закрытой скобкой ???

Извините, если я получил это полностью запутанным. Любая помощь приветствуется.

С уважением, Pablo

Ответы [ 5 ]

2 голосов
/ 31 августа 2009

Квадратные скобки - это классы персонажей, а парены - для группировки. Я не уверен, что вы подразумеваете под "фигурные скобки".

Это в основном совпадает с парой имя = значение, где имя состоит из одного или нескольких символов «слово», точки или дефиса, а значение представляет собой либо один символ в кавычках, либо строку в двойных кавычках, либо набор непробельные символы. Символы в одинарных кавычках не могут содержать одинарных кавычек, а строки в двойных кавычках могут не содержать двойных кавычек (оба, возможно, незначительные недостатки, независимо от того, какой это синтаксис). Также, возможно, существует некоторая двусмысленность, поскольку последний вариант («набор символов, не являющихся пробелами») может совпадать с чем-то, начиная с одинарной или двойной кавычки.

Кроме того, вокруг знака равенства или в начале могут появляться ноль или более пробелов (это \s* бит).

1 голос
/ 31 августа 2009

Он ищет строки текста, которые в основном

<identifier> = <value>
  • идентификатор состоит из букв, цифр, '-' и '.'

  • значение может быть строкой в ​​одинарных кавычках, строками в двойных кавычках или любой другой последовательностью символов (если только она не содержит пробела).

Так что это будет соответствовать линиям, которые выглядят так:

foo = 1234
bar-bar= "a double-quoted string"
bar.foo-bar ='a single quoted string'
   .baz      =stackoverflow.com this part is ignored

Несколько замечаний:

  • Невозможно поместить кавычку в строку в кавычках (например, использовать \ "inside" ... ").
  • Все, что находится после строки в кавычках, игнорируется.
  • Если строка в кавычках не используется для значения , то все, начиная с первого пробела и далее, игнорируется.
  • Пробел необязательный
0 голосов
/ 31 августа 2009

Да, вы запутались. : P Во-первых, в этом регулярном выражении нет скобок; это слово обычно относится к фигурным скобкам: {}. Это регулярное выражение содержит только квадратные скобки и круглые скобки (или круглые скобки), и все они являются метасимволами регулярного выражения - они не предназначены для буквального соответствия этим символам. То же самое относится и к большинству других персонажей.

Вы можете найти этот сайт полезным. Очень хороший учебник и справочный сайт для всех вещей регулярных выражений.

0 голосов
/ 31 августа 2009

Давайте разбить \s*([\w\.-]+)\s*=\s*('[^']*'|\"[^\"]*\"|[^\s]+) на части:

\s*([\w\.-]+)\s*:

  • \s* означает 0 или более пробельных символов
  • `[\ w .-] + означает 1 или более из следующих символов: A-Za-z0-9 _.-

('[^']*'|\"[^\"]*\"|[^\s]+):

  • Один или несколько символов, не являющихся символами, заключенными в 'и'.
  • Один или несколько символов, не являющихся символами «в» и «.»
  • Один или несколько символов без пробела

Так что в основном вы можете игнорировать \s*, пытаясь понять выражение, они просто обрабатывают удаление пробелов.

0 голосов
/ 31 августа 2009

RegexBuddy говорит:

\s*([\w\.-]+)\s*=\s*('[^']*'|"[^"]*"|[^\s]+)

Options: case insensitive

Match a single character that is a “whitespace character” (spaces, tabs, line breaks, etc.) «\s*»
   Between zero and unlimited times, as many times as possible, giving back as needed (greedy) «*»
Match the regular expression below and capture its match into backreference number 1 «([\w\.-]+)»
   Match a single character present in the list below «[\w\.-]+»
      Between one and unlimited times, as many times as possible, giving back as needed (greedy) «+»
      A word character (letters, digits, etc.) «\w»
      A . character «\.»
      The character “-” «-»
Match a single character that is a “whitespace character” (spaces, tabs, line breaks, etc.) «\s*»
   Between zero and unlimited times, as many times as possible, giving back as needed (greedy) «*»
Match the character “=” literally «=»
Match a single character that is a “whitespace character” (spaces, tabs, line breaks, etc.) «\s*»
   Between zero and unlimited times, as many times as possible, giving back as needed (greedy) «*»
Match the regular expression below and capture its match into backreference number 2 «('[^']*'|"[^"]*"|[^\s]+)»
   Match either the regular expression below (attempting the next alternative only if this one fails) «'[^']*'»
      Match the character “'” literally «'»
      Match any character that is NOT a “'” «[^']*»
         Between zero and unlimited times, as many times as possible, giving back as needed (greedy) «*»
      Match the character “'” literally «'»
   Or match regular expression number 2 below (attempting the next alternative only if this one fails) «"[^"]*"»
      Match the character “"” literally «"»
      Match any character that is NOT a “"” «[^"]*»
         Between zero and unlimited times, as many times as possible, giving back as needed (greedy) «*»
      Match the character “"” literally «"»
   Or match regular expression number 3 below (the entire group fails if this one fails to match) «[^\s]+»
      Match a single character that is a “non-whitespace character” «[^\s]+»
         Between one and unlimited times, as many times as possible, giving back as needed (greedy) «+»


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