Android 在<;中匹配url模式;意向过滤器>;

Android 在<;中匹配url模式;意向过滤器>;,android,android-intent,intentfilter,Android,Android Intent,Intentfilter,我希望我的一项活动能够获取特定的url。模式是: http://www.example.com/abc123/foo/xyz789 路径组件“abc123”和“xyz789”可以是任意字母数字序列,长度>1 在我的清单中这样做: <activity> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category a

我希望我的一项活动能够获取特定的url。模式是:

http://www.example.com/abc123/foo/xyz789
路径组件“abc123”和“xyz789”可以是任意字母数字序列,长度>1

在我的清单中这样做:

<activity>
  <intent-filter>
    <action
      android:name="android.intent.action.VIEW" />
    <category
      android:name="android.intent.category.DEFAULT" />
    <category
      android:name="android.intent.category.BROWSABLE" />

    <data
      android:scheme="http"
      android:host="example.com" 
      android:pathPattern="/.*/foo/.*" />
两者都匹配。我想可能是。*接线员没有像我预期的那样工作?任何帮助都会很好

谢谢


问题在于。*匹配所有内容,-而不匹配任何内容-“/.*/”匹配“/”,这相当于路径中的“/”

此外,您可以确保示例中的两个路径段“abc123”与此处支持的表达式匹配器相等

换句话说,您希望将您的路径更改为可以匹配的更简单的路径。如果是您的组件接收到了意图,那么您可以传递一个假的URL,它只是真实URL的可变部分。例如,如果要匹配

http://www.example.com/.+/foo/.+
如果两个捕获的组相等,只需传入intent,并将数据模式设置为*

然后,当您收到意图时,解析它,并通过填充已知的常量部分将其转换为真实的URL。

由于android操作系统使用、观察和文档,它只能与
*和
\\\
(转义字符)一起工作,我们可能需要有点创造性——即。,使用
\\
停止正则表达式求值,然后再继续

<data
                android:host="example.com"
                android:pathPattern=".*\\/foo/.*"
                android:scheme="http"/>

它将只匹配
myexample.com/which
而不匹配
myexample.com

要创建具有不同uri的不同意向筛选器,请在uri末尾使用
/
,如

样品溶液,使用http://www.example.com/abc123/foo/xyz789/而不是http://www.example.com/abc123/foo/xyz789 然后使用

example.com/abc123/
android:pathPattern=“.\\\/

example.com/abc123/foo/xyz789/
android:pathPattern=“.\\/foo/*\\/


example.com/abc123/foo/xyz789/bar/uvx456/
android:pathPattern=“.\\/foo/*\\/bar/*\\/
我今天遇到了同样的问题,我的解决方案是:

   <data android:pathPattern="/remotes/..*/..*"/>

使用(..*)替换(+.+)

在最初的问题中,我想这是可行的:

<data
                android:host="example.com"
                android:pathPattern="..*/foo/..*"
                android:scheme="http"/>


Hi,感谢您提供的信息,这两个组将有所不同(更新Q以反映)。我们可以使用“.+运算符”吗?这似乎仍然匹配所有内容:pattern=“/.+/foo/+”这是非常有价值的…*匹配任何字符的一个或多个事件。非常感谢!这正是我想要的!)
<data
                android:host="example.com"
                android:pathPattern="..*/foo/..*"
                android:scheme="http"/>