任何文件扩展名的正则表达式

9
我正在尝试构建一个正则表达式来判断字符串是否是有效的文件扩展名。它可以是任何扩展名。
hello        no
.hello       Yes
..hello      No
hello.world  No
.hello.world No
.hello world No

我已经尝试过^\.和^\.[\.],但无法得到我想要的结果。这似乎应该很简单。


1
我也像其他人一样开始做,但是在他们的最后一个示例(.hello world)上失败了...。 - Hunter Eidson
在编写正则表达式之前,您必须能够用英语描述您要实现的规则。 - Andy Lester
7个回答

14
^\.[^.]+$
这意味着以 . 开头,然后是除了点(.)之外的任何字符。
如果您只想使用字母数字字符,也可以使用此选项。
^\.[a-zA-Z0-9]+$

谢谢!我想到这应该很容易。 - ka.tee.jean
如果文件扩展名位于字符串末尾,例如/example/image.svg,这个正则表达式也可以工作:\.[a-zA-Z0-9]+$ - Matt Stephens
4
.tar.gz 这样的扩展名怎么处理? - Pedro Adame Vergara

5
尝试使用这个正则表达式:
^\.[\w]+$

匹配以"."开头,后跟一个或多个"word"字符,直到字符串末尾。


2
如果您已经有一个带有扩展名的字符串,例如".hello",并且您只是想测试它是否匹配,则可以尝试使用^\.[^\\/:*?"<>|\s.]{1,255}$。它适用于所有示例情况。
开头的^\.表示整个字符串必须以句点"."开头。 [^\\/:*?"<>|\s.]表示在句点之后,您可以使用除反斜杠、正斜杠、冒号、星号、问号、双引号、小于或大于符号、垂直线、空格字符或句点之外的任何字符。请随意添加其他字符,以使方括号中的脱字符后面禁止出现任何字符,或删除我添加的任何您希望允许的字符。 (注意:文件系统对于文件名/扩展名的可接受字符取决于具体实现)
结尾的{1,255}$量化我们刚刚定义的可接受字符的数量,一直到字符串的结尾。因此,在句点之后允许的任何内容都可以是1到255个字符长,并且必须一直持续到字符串的结尾。请随意将255更改为您喜欢的任何数字。 (注意:文件系统对于文件名/扩展名的最大长度取决于具体实现)
如果您要搜索像"https://sub.example.com/directory1/directory2/file.php"这样的字符串以查找文件扩展名,则应改用\.[^\\/:*?"<>|\s.]{1,255}$来搜索包括句点的最终扩展名。

2
尝试使用以下正则表达式,它匹配以点开头并跟随至少一个其他字符的所有字符串:
^\.[^.]+$

1

这在 JavaScript 中对我有效

^[.][a-zA-Z0-9.,$;]+$

尽管OP没有明确说明any的含义,但这个解决方案会丢弃一些文件扩展名中有效的字母/符号,比如-+。你在JavaScript中尝试过接受的答案吗?看看它是否也能在那里工作? - FrankM

0
如果你正在寻找一个正则表达式来从文件名中获取文件扩展名,那么这里就是它。
(?<=\.)[^.\s]+$

0

我使用:

(?:.*\\)+([^\\]+)

对于 Windows,它会生成带扩展名的短文件名。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接