regex 匹配具有两个或多个唯一扩展名的文件的正则表达式

i7uq4tfw  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(79)

我正在尝试创建正则表达式来匹配具有两个或多个扩展名的文件,但我想忽略重复的扩展名。
我想要的结果示例:

videogame.exe.exe     - Don't match
unknown.pdf.exe       - Match
Resume.doc.docx       - Match
SalesNumbers.pdf.pdf  - Don't Match
summary.pdf.docx      - Match

现在我有以下正则表达式:

(\.\w+)(?!\1)\.\w+

这几乎成功了。但是,如果第二个扩展名包含第一个扩展名,我就得不到匹配。下面的例子没有提供匹配,但我希望它们提供。

Resume.doc.docx
text.exe.exe1
wz1wpwve

wz1wpwve1#

这个正则表达式,使用 word boundary

(\.\w+)(?!\1\b)\.\w+
            ^^

(\.\w+)(?!\1$)\.\w+
            ^

Online Demo

正则表达式匹配如下:

| 节点|解释|
| --|--|
| (|分组并捕获到\1:|
| \.|- 是的|
| \w+|单词字符(a-z,A-Z,0-9,)(1次或多次(匹配最大可能量))|
| )|结束\1|
| (?!| [look ahead](https:perldoc.perl.org/perlre#Lookaround-A ssertions)查看是否有:|
| \1|与捕获\1匹配的内容|
| \b|字符(\w)和非字符锚之间的边界锚|
| )|先行结束|
| \.|- 是的|
| \w+|单词字符(a-z,A-Z,0-9,
)(1次或多次(匹配最大可能量))|

相关问题