Рубиновые регулярные выражения и подстроки - PullRequest
1 голос
/ 24 февраля 2012

У меня проблемы с такими строками:

1) 125******* or 125co****** or 125CO*******
2) 125af***** or 125AF****** or 125f****** or 125AF********

Начальная длина номера может составлять от 2 до 11 символов, за которыми следуют некоторые подстроки (например, "co", "f" и т. Д.), А затем буквенно-цифровые строки.

Пока я сделал эти два регулярных выражения, но они не работают должным образом:

/^([0-9]{2,11})([c]?[o]?)/i
/^([0-9]{2,11})(a?)f/i

Обратите внимание, что обе ситуации не должны конфликтовать друг с другом. 1) и 2) являются отдельными. Как я могу это сделать?

редактировать: добавлено из комментария:

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

Например. файл с именем

125.doc or 
125co_tes.doc or 
125CO_tes.doc

следует сохранить в каталоге «collection»,
но те, которые называются

125af.double.jpg or 
125AF-happy.txt or 
125f_testlong.xls or 
125AF.pdf

должны быть сохранены в каталог «документы» и т. Д.

Ответы [ 3 ]

1 голос
/ 24 февраля 2012
string="125af.double.jpg"
case string
  when /^([0-9]{2,11})(a?)f/i
    # Document
  when /^([0-9]{2,11})([c]?[o]?)/i
    # Collection
end

Если вы сначала отметите /^([0-9]{2,11})(a?)f/i, то между этими двумя регулярными выражениями не будет конфликта.

1 голос
/ 24 февраля 2012

Подходящих файлов для "коллекции":

/^(\d{2,11})((?:(?:c?o|co?).*)?\.[a-z0-9]+)$/i

Соответствующие файлы для «документов»:

/^(\d{2,11})((?:af?|a?f).+)$/i

Дайте мне знать, если он недостаточно строгий (или слишком строгий) для вашего приложения.

0 голосов
/ 24 февраля 2012

С помощью следующего вы можете протестировать оба типа файлов

if filename =~ /^\d{2,11}(co|a?f)?/i 
  if $1 == '' || $1.downcase == 'co'
     # do CO
  elsif $1.downcase == 'af'
     # do AF
  end
end

См. В действии http://rubular.com/r/7jGxQVJMNC

Поддерживать его будет непросто, если у вас более 2 случаев

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