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

Rob*_*kic 37 android

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

不幸的是,如果有问题的文件在路径的其他地方有一段时间,这似乎不能正常工作; 例如"my.filename.xyz".

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

小智 42

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

<data android:pathPattern=".*\\.mytype"/>
<data android:pathPattern=".*\\..*\\.mytype"/>
<data android:pathPattern=".*\\..*\\..*\\.mytype"/>
<data android:pathPattern=".*\\..*\\..*\\..*\\.mytype"/>
Run Code Online (Sandbox Code Playgroud)

但是很难看.谁知道更好的方法?

  • 嗯..如果一只猫是黑色或白色,只要捕捉老鼠就没关系.谢谢你! (3认同)
  • 非常感谢,一般来说不是蛮力方法的粉丝,但这同样是解决我们遇到的类似问题的唯一方法。 (2认同)

Bri*_*lin 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的解决方案,添加额外的模式以匹配具有尽可能多的点的路径,因为您愿意指定模式.


I'm*_*gon 6

我用过这个:

<activity
   android:name=".activity.GifActivity"
   android:label="Cool Player ^_^">
   <intent-filter>
       <action android:name="android.intent.action.VIEW" />
       <category android:name="android.intent.category.DEFAULT" />
       <data android:scheme="http"/>
       <data android:scheme="https" />
       <data android:host="*"/>
       <data android:pathPattern="/.*\\.mp4"/>
   </intent-filter>
</activity>
Run Code Online (Sandbox Code Playgroud)

这将打开以下网址:

不会打开以下内容:

我认为这里的关键是host="*".我还没有对此进行彻底的研究.但它对我有用,希望它也可以帮助那里的人.

  • 第一次正斜杠的目的是什么? (2认同)