你怎么找到“。”?

时间:2012-06-28 18:50:58

标签: regex pcre autoit

我正在尝试创建一个正则表达式来查找完整文件路径中的文件名,但它不应仅返回目录。例如,C:\Users\IgneusJotunn\Desktop\file.doc应该返回file.docC:\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)

应该工作,在最后一个反斜杠之后找到任何东西,只捕获带有句点的东西。如何融入一个时期?或者只是匹配文件的任何方式?

编辑:回答了我自己的问题。我很感兴趣,为什么它不起作用,如果有一个更优雅的解决方案。

3 个答案:

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

  • 反转字符串。
  • 寻找“。”
  • 使用StringInStr(和/或“/”)
  • 查找“\”
  • 从StringinStr
  • 的返回中修剪右侧
  • 再次反转。