如果文件名中的某个句点存在句点,则匹配文件扩展名的pathPattern不起作用?

时间:2010-08-03 19:28:18

标签: android

我看到许多使用pathPattern定义特定文件扩展名/类型的intent-filter的例子;例如,pathPattern=".*\\.xyz"

不幸的是,如果相关文件在路径中的其他位置有一段时间,则这似乎无法正常工作;例如“my.filename.xyz”。

是否有一个与“myfilename.xyz”和“my.filename.xyz”匹配的pathPattern语法?

3 个答案:

答案 0 :(得分:42)

尝试在点文件夹中打开文件时遇到同样的问题。我发现我可以添加多个“数据”元素,具体取决于我希望在路径中有多少个点:

<data android:pathPattern=".*\\.mytype"/>
<data android:pathPattern=".*\\..*\\.mytype"/>
<data android:pathPattern=".*\\..*\\..*\\.mytype"/>
<data android:pathPattern=".*\\..*\\..*\\..*\\.mytype"/>
但是,丑陋。有人知道更好的方法吗?

答案 1 :(得分:37)

android团队选择了一种不幸的方式来实现pathPattern。您可以看一下如何在android.os.PatternMatch类中实现模式匹配:

https://github.com/android/platform_frameworks_base/blob/master/core/java/android/os/PatternMatcher.java

我们已经习惯了。*像在正则表达式中那样工作,其中*匹配是贪婪的并且将匹配尽可能多的字符。在PatterMatch的实现中,匹配并不贪婪。 。*将匹配尽可能多的字符,直到找到字符串中下一个字符的匹配。

示例:

字符串:“/ mnt / my.file.mytype”
pathPattern:“。* \\。mytype”

pathPattern中的“。*”将匹配子字符串“/ mnt / my”,因此无法匹配字符串。

鉴于此限制,我没有找到一种方法来编写一个pathPattern,它可以匹配任何以“.mytype”结尾的字符串。您可以做的最好的事情就是遵循Jason的解决方案,添加额外的模式以匹配路径,以及您愿意指定模式的点数。

答案 2 :(得分:6)