首页 > 解决方案 > Android pathPattern 正则表达式问题

问题描述

我面临与 Android Intent-Filters esp 相关的问题。在具有路径模式的数据元素中参考:https ://developer.android.com/guide/topics/manifest/data-element

我需要为有效的 URL 匹配一个模式,比如

任何东西任何东西的火车

fromString -to- toString -trains

下面提到的模式几乎可以完美地工作

<data android:pathPattern=".*to.*trains" />
<data android:pathPattern=".*to.*trains/" />

但是,当 from 或 to 包含关键字“t”时,此模式将失败

例如

  1. 火车到火车
  2. 直达列车
  3. a-to-ata-火车
  4. ata-to-aa-火车

对于给定的问题,包括关键字“t”在内的任何内容都应使用路径模式进行匹配。您能否建议我如何为这种情况编写适当的模式?我是创建路径模式(正则表达式或通配符或模式 glob)的初学者,但我android:pathPattern在正则表达式测试站点中使用的模式但不是路径模式。

此外,我们能否支持带有连字符“-”之类的特殊符号的正则表达式?

由于模式匹配器的要求,我看到符号 # 不起作用。


根据PATTERN_SIMPLE_GLOB,路径模式不起作用,因为不需要转义 Asterix。

文件:

因为在从 XML 读取字符串时(在将其解析为模式之前)将 '' 用作转义字符,因此您需要进行双重转义:例如,文字 ' ' 将写为“\ ”,而文字 '' 将被写为 "\\"。这与在 Java 代码中构造字符串时需要编写的内容基本相同。


注意:这个问题与正则表达式的工作无关。模式/正则表达式在正则表达式测试器站点上运行良好并不意味着它可以在 Android 平台上运行,因为 Andriod Intent 过滤器在解析方面有一些限制。根据文档,它只有两个通配符。


要测试深层链接,请使用以下 adb 命令:

adb shell am start -a android.intent.action.VIEW -d "deep link" [包名(可选)]

例子:

 adb shell am start -a android.intent.action.VIEW -d "https://www.website.com/a-to-a-trains" com.website.sample.package

标签: androidandroid-intentglobintentfilter

解决方案


您可以使用\(反斜杠)使用特殊字符。

IE

\- or \.

对于您的解决方案,这可能有效,

[A-Za-z0-9].*\-.[A-Za-z0-9].*

推荐阅读