Я встретил следующее регулярное выражение в рубиновом коде, кто-нибудь может это объяснить мне?любое объяснение следующего регулярного выражения?
[\w-]+\.(?:doc|txt)$
особенно я думаю, что я не ясно, о [\w-]+\
и ?:
Я встретил следующее регулярное выражение в рубиновом коде, кто-нибудь может это объяснить мне?любое объяснение следующего регулярного выражения?
[\w-]+\.(?:doc|txt)$
особенно я думаю, что я не ясно, о [\w-]+\
и ?:
Это последовательность из одного или более букв/цифр/подчеркивание/дефиса, за которым следует период, за которым следует либо doc
или txt
в конец строки.
[\w-]
есть буква/номер/знак подчеркивания/дефис.\.
- это беглый период.(?:
...... )
- это группировка (требуется для выражения опций между doc
и txt
), которые не будут отображаться в результате в виде захваченной подстроки.Это, скорее всего, написано для поиска имени файла с расширением doc
или txt
, внедренного в строке многострочного. Или, если автор этого регулярного выражения является глупым (ошибся $
для \z
), то он, возможно, был предназначен для простого сопоставления имени файла с этим расширением.
@DamianoStoffie Извините, но мой ответ был неполным. Теперь это исправлено. – sawa
\ ш означает любое слово персонажу
минус в этом контексте просто означает минус CHAR
(?: Док | TXT) означает соответствие документ или текстовый
поэтому любое слово символ или минус повторное один или несколько раз, после чего точки следует либо документ или TXT и шаблон должны быть в конце линии
автор должен ускользнуть от минуса для ясности имх
Существует онлайн-тестер регулярных выражений, доступный по адресу 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
Не мог ли голосующий голова объяснить свою мотивацию? – bogl
Это означает, что имя файла, который содержит только буквы (AZ, AZ, 0-9 и подчеркивание) и дефис, и с расширением либо .doc
, либо .txt
.
В деталях,
\w
соответствует символу слова[\w-]
матчей либо символ слова или дефис[\w-]+
соответствует одному или более таким символам\.
соответствуют периоду(?:)
формирует группу без захвата(?:doc|txt)
матчей либо doc
последовательности, или последовательностьtxt
$
соответствует концу линии
http://meta.stackoverflow.com/a/253896/2988 –
@Drenmi Различной языки имеют разные синтаксисы regex. Вы должны указать, какой вариант регулярного выражения вы используете. Этот вопрос касается Ruby ** и ** о регулярном выражении. Если вы не исправите свое редактирование, кто-то (включая меня) исправит его в какой-то момент. – sawa
@sawa: Теперь мы оба положили его, поэтому мы можем быть уверены, что он есть. :-) – Drenmi