android - 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”时,此模式将失败
例如
- 火车到火车
- 直达列车
- a-to-ata-火车
- 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
解决方案
您可以使用\(反斜杠)使用特殊字符。
IE
\- or \.
对于您的解决方案,这可能有效,
[A-Za-z0-9].*\-.[A-Za-z0-9].*
推荐阅读
- templates - helm模板变量中如何判断helm verison
- amazon-web-services - 在 AWS Cognito 中自定义电子邮件验证页面
- google-maps - Google Maps Static API:错误 413(请求实体太大)
- c# - C# WPF - 在 DataView 中添加新项目后显示在 ListBox 中排序的项目
- c++ - 对向量结构进行排序 C++
- javascript - 如何在打字稿中没有运行时副作用的情况下进行精确的类型检查?
- laravel-8 - 在生产中找不到表 - Laravel
- unit-testing - 是否存在“无效的 Facebook 评论”?
- entity-framework-6 - System.TypeLoadException:无法从程序集“EntityFramework”加载类型“System.Data.Entity.Infrastructure.Design.Executor+GetContextType”
- swift - IBOutlet/IBAction 和以编程方式构建视图之间的快速区别?