我正在尝试创建一个正则表达式来查找完整文件路径中的文件名,但它不应仅返回目录。例如,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)
应该工作,在最后一个反斜杠之后找到任何东西,只捕获带有句点的东西。如何融入一个时期?或者只是匹配文件的任何方式?
编辑:回答了我自己的问题。我很感兴趣,为什么它不起作用,如果有一个更优雅的解决方案。
答案 0 :(得分:1)
Local $string = StringRegExp($string, "[^\\]*\.doc\z|[^\\]*\.docx\z|[^\\]*\.xls\z|[^\\]*\.xlsx\z",1)
事实上,句点确实可以使用大多数特殊字符使用的相同转义斜杠。对于文档类型,Or管道和不同的扩展名很有效。如果由于某种原因需要添加扩展名,只需添加另一个或。
答案 1 :(得分:1)
$sFile = StringRegExp($sPath, "[^\\]+\.(?:doc|xls)x?$", 1)
无法保证文件夹不会被命名,因此绝对可以肯定您必须检查文件/文件夹属性。然而,任何人都会用'.docx'
之类的名字命名文件夹是值得怀疑的答案 2 :(得分:-1)