2016-01-10 2 views
0

Я встретил следующее регулярное выражение в рубиновом коде, кто-нибудь может это объяснить мне?любое объяснение следующего регулярного выражения?

[\w-]+\.(?:doc|txt)$ 

особенно я думаю, что я не ясно, о [\w-]+\ и ?:

+0

http://meta.stackoverflow.com/a/253896/2988 –

+0

@Drenmi Различной языки имеют разные синтаксисы regex. Вы должны указать, какой вариант регулярного выражения вы используете. Этот вопрос касается Ruby ** и ** о регулярном выражении. Если вы не исправите свое редактирование, кто-то (включая меня) исправит его в какой-то момент. – sawa

+0

@sawa: Теперь мы оба положили его, поэтому мы можем быть уверены, что он есть. :-) – Drenmi

ответ

3

Это последовательность из одного или более букв/цифр/подчеркивание/дефиса, за которым следует период, за которым следует либо doc или txt в конец строки.

  • [\w-] есть буква/номер/знак подчеркивания/дефис.
  • \. - это беглый период.
  • (?: ...... ) - это группировка (требуется для выражения опций между doc и txt), которые не будут отображаться в результате в виде захваченной подстроки.

Это, скорее всего, написано для поиска имени файла с расширением doc или txt, внедренного в строке многострочного. Или, если автор этого регулярного выражения является глупым (ошибся $ для \z), то он, возможно, был предназначен для простого сопоставления имени файла с этим расширением.

+0

@DamianoStoffie Извините, но мой ответ был неполным. Теперь это исправлено. – sawa

-1

\ ш означает любое слово персонажу

минус в этом контексте просто означает минус CHAR

(?: Док | TXT) означает соответствие документ или текстовый

поэтому любое слово символ или минус повторное один или несколько раз, после чего точки следует либо документ или TXT и шаблон должны быть в конце линии

автор должен ускользнуть от минуса для ясности имх

0

Существует онлайн-тестер регулярных выражений, доступный по адресу https://regex101.com/ Вы можете использовать его для анализа, проверки или отладки строк регулярных выражений. Это уже спасло мне много времени.

Ваше регулярное выражение детальнее автоматически с помощью этого инструмента:

/[\w-]+\.(?:doc|txt)$/ 
     [\w-]+ match a single character present in the list below 
      Quantifier: + Between one and unlimited times, as many times as possible, giving back as needed [greedy] 
      \w match any word character [a-zA-Z0-9_] 
      - the literal character - 
     \. matches the character . literally 
     (?:doc|txt) Non-capturing group 
      1st Alternative: doc 
       doc matches the characters doc literally (case sensitive) 
      2nd Alternative: txt 
       txt matches the characters txt literally (case sensitive) 
     $ assert position at end of the string 
+0

Не мог ли голосующий голова объяснить свою мотивацию? – bogl

-1

Это означает, что имя файла, который содержит только буквы (AZ, AZ, 0-9 и подчеркивание) и дефис, и с расширением либо .doc, либо .txt.

В деталях,

  • \w соответствует символу слова
  • [\w-] матчей либо символ слова или дефис
  • [\w-]+ соответствует одному или более таким символам
  • \. соответствуют периоду
  • (?:) формирует группу без захвата
  • (?:doc|txt) матчей либо doc последовательности, или последовательность
  • txt
  • В рубине, $ соответствует концу линии