10

在我的应用程序中,我想处理使用以下模式的链接:

scheme://host/folder1/folder2/folder3/folder4/article

通过使用以下方法,我让它暂时工作:

<intent-filter>
    <data android:scheme="http" />
    <data android:host="www.laprensa.com.ni" />
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.DEFAULT" />
    <category android:name="android.intent.category.BROWSABLE" />
</intent-filter>

但是,正如您可能想象的那样,它会打开任何以 开头的链接scheme://host,并且我想确保我只选择那些具有上述模式的链接,其中页面是主机内的 4 个文件夹。

另一个小问题是文件夹名称永远不会相同,因此我不能简单地使用android:path. 还值得注意的android:pathPrefix是不一样,因为前三个文件夹是日期相关的。

例如,网址的结构如下:

scheme://host/year/month/day/articleType/article

我一直在阅读有关如何使用的文档和问题,android:pathPattern但我真的不明白我应该输入什么。

有任何想法吗?

谢谢!

编辑

根据建议,我尝试了:

android:pathPattern="/.*/.*/.*/.*/.*"

每个 '.*' 代表一个文件夹,但似乎仍然选择其他不是文章的 URL。例如,这里有两个不同的 url:

我要处理的网址:

http://www.laprensa.com.ni/2013/05/10/vida/145996-lionel-richie-defiende-a

我不想处理的网址

http://www.laprensa.com.ni/2013/05/10/vida/

我想这里的问题是它们都有相同数量的级别,唯一的区别是一个实际上在最后一个之后有一些东西,'/'我可以尝试其他任何想法吗?我确实尝试再添加一个,'/.*'但它完全停止工作并且应用程序停止处理任何链接期间:(

4

2 回答 2

30

你很接近,但错过了最后一部分。这应该适合你:

android:pathPattern="/.*/.*/.*/.*/..*"

这将匹配任何具有四个重复/[anything]的路径,并强制您在 final 之后必须有一些东西/

正如你所问:

我要处理的网址:

http://www.laprensa.com.ni/2013/05/10/vida/145996-lionel-richie-defiende-a

我不想处理的网址

http://www.laprensa.com.ni/2013/05/10/vida/

解释

.强制执行“任何字符之一”的模式。.*强制执行“任何字符的任何数量(或没有!)” 。

结合这两者,..*强制执行“任意数量的任意字符,但必须至少提供一个”

于 2017-04-13T15:39:16.570 回答
6

您应该将android:pathPattern属性准确地添加到您定义的配置中。如Android 文档中所述,android:pathPattern可以包含以下用于构建简化正则表达式的通配符:

  • 星号 ('*') 匹配从 0 到多次出现的前一个字符的序列。
  • 后跟星号 (".*") 的句点匹配 0 到多个字符的任何序列。

在你的情况下:

<data android:scheme="http"
      android:host="www.laprensa.com.ni"
      android:pathPattern="/.*/.*/.*/.*/.*" />

其中每个 .* 代表一个文件夹名称。

于 2013-05-10T22:08:54.467 回答