-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)

应该可以工作,在最后一个反斜杠之后找到任何东西,只捕获带有句点的东西。如何合并句号?或者任何方式来匹配文件?

编辑:回答了我自己的问题。我对它为什么不起作用以及是否有更优雅的解决方案感兴趣。

4

3 回答 3

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

句点实际上与大多数特殊字符使用的相同转义斜线一起工作。至于文档类型,Or 管道和不同的扩展名效果很好。如果由于某种原因您需要添加扩展,只需添加另一个 Or。

于 2012-06-28T19:11:21.100 回答
1

嗯,我很无聊。你可以这样做:

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

不能保证文件夹不会被命名,因此要绝对确定您必须检查文件/文件夹属性。然而,任何人都会用“.docx”之类的东西命名一个文件夹是值得怀疑的

于 2012-06-30T00:40:21.687 回答
-1
  • 反转字符串。
  • 寻找“。”
  • 使用 StringInStr(和/或“/”)查找“\”
  • 从 StringinStr 的返回中修剪右侧
  • 再反过来。
于 2012-06-30T22:34:41.140 回答