2012-06-28 3 views
-1

Я пытаюсь создать регулярное выражение, чтобы искать имена файлов из полных путей к файлам, но он не должен возвращаться только для каталога. Например, C:\Users\IgneusJotunn\Desktop\file.doc должен вернуть file.doc, тогда как C:\Users\IgneusJotunn\Desktop\folder не должен отвечать на совпадения. Это все файлы Word или Excel, но я предпочитаю не полагаться на это. Это:Как вы находите "."?

StringRegExp($string, "[^\\]*\z",1) 

находит, что после последней косой черты, но не может отличать файлы от папок. Это:

StringRegExp($string, "[^\\]*[dx][ol][cs]\z",1) 

почти работает, но это некрасиво хак и может быть DOCX или XLSX файлы. Кроме того, файлы могут быть названы как MyNamesDoc.doc. Легко решается, если я могу найти период, но . - это используемый символ (это означает любой символ, кроме новой строки), который, похоже, не работает с экранами. Это:

StringRegExp($ue_string, "[^\\]*\..*\z",1) 

должен работать, находя что-либо после последней обратной косой черты, захватывая только что-то с периодом в нем. Как включить период? Или любой способ совпадения файлов?

Редактировать: Ответил мой вопрос. Меня интересует, почему он не работает, и если есть более элегантное решение.

+1

Вперед и сделайте папку прямо сейчас и введите в нее период. Полностью допустимый синтаксис. Например, «My.Folder.Of.Awesome». '/? < > \: * | «' - некоторые незаконные символы, но периоды в порядке. – TheZ

ответ

1
Local $string = StringRegExp($string, "[^\\]*\.doc\z|[^\\]*\.docx\z|[^\\]*\.xls\z|[^\\]*\.xlsx\z",1) 

Периоды на самом деле работают с одинаковой косой чертой, используемой большинством специальных символов. Что касается типа документа, то труба Or и другое расширение отлично работают. Если по какой-то причине вам нужно добавить расширение, просто добавьте еще один.

0

Мех, мне скучно. Вы можете сделать это:

$sFile = StringRegExp($sPath, "[^\\]+\.(?:doc|xls)x?$", 1)

Там нет никаких гарантий, что папка не будет называться, что, таким образом, чтобы быть абсолютно уверенным, вы должны проверить файл/папку атрибутов. Однако вряд ли кто-нибудь назвал бы папку с чем-то вроде «.docx»

0
  • Обратный текст.
  • Ищите "."
  • Посмотрите на "\" с StringInStr (и/или "/")
  • Обрезать правую сторону от возвращения StringinStr
  • Reverse его снова.
Смежные вопросы