这是一篇满文大字的文章… , 个人本身并不喜欢看文字, 不方便录视频讲解; 但保证满满关于此应用的干货。
命令正则式
简介
正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。 —– 百度百科
根据解释,可以看出,可以使用正则来匹配命令。没错,本App目前就是采用这种方式设计的。
不过,目前正则解析器是基于正则的实现改良过,适用于解析参数与中文的,我称它为参数正则解析器。
正则学习起来对初学者并不友好,但此App中仅涉及极少的几种情况,并且易于理解;下面会有来自App已有指令的几个示例。
另外,在App内用’%’代替了匹配任意字符,’#’代替匹配任意大小写数字。
示例
- 1.
打(电话)?给@{name}
可以匹配命令的有:
打给...
和打电话给...
两种,省略号为任意长度任意的字符。
从这可以看出来:
()?
的是可以包含或不包含括号内的;注意这里?
和其他符号均为英文符。@{name}
是用来标记命令中的’参数’,比如在这里代表联系人,其中name
指参数名,可还以为contact
。
其他用法:
(1) 定个?闹钟
匹配:
定闹钟
,定个闹钟
- 2.
(显示|下拉)?通知栏
可以匹配命令的有:
显示通知栏
,下拉通知栏
,通知栏
三种说法。
可以看到括号内有个|
符,代表或的关系,括号内可以匹配显示
或下拉
两个词。
- 3.
发消息内容[是为]@{content}
可以匹配命令的有: 发消息内容是..
, 发消息内容为..
[amx]
可等价为(a|m|x)
此外,[a-z]
匹配一个小写字母,[0-9]
匹配一个数字,[a-zA-Z]
匹配一个字母。
上面讲到了 ()
,?
,[]
的用法, 接下来讲另外两个正则符号 *
和 +
- 如何匹配一个数(100,273)呢?
一个数是多个数字组成的。
[0-9]+
可以用来匹配一个数, 多长的数字都可以,至少一个。 (主要讲解符号+
意义,不详细讨论分析。)
+
就限制它的左边表达式匹配次数至少为1 (>=1)。
*
和+
区别在于*
匹配次数可以为0 (>=0)。
?
匹配次数为0次或1次。
此外,在app正则解析器的设计中,使用%
和#
符号来表示匹配任意字符
和(大小写)数字
例如:
- abc%
可匹配:以abc开头的任意字符串
- abc#
可匹配:以abc开头,后跟数字的任意字符串。如
abc123
、abc一百二十
没了≡[。。]≡
自定义指令需要的正则知识就这么些, 其他需求可自行深入学习。
参数正则
参数正则是专为此APP设计的,用于方便解析命令中的参数并在脚本中获取。
例如:
呼叫@{name}
»解析» 呼叫中国移动
得到的name
即为中国移动
在脚本中获取方式: argMap['name']
为指令设置正则
首先,命令中有我们在脚本中需要知道的变量, 比如询问天气。
@{city}的?天气(怎么样)?
了解了前文,相信你已经知道这个表达式能匹配到怎样的命令,比如这个命令我们需要获得@{city}
匹配到的地名。这里city
参数会自动解析出来。
下图,是这个指令的正则设置和测试:
当设置保存之后, 在命令匹配到这条指令时,App内部解析器会将设置的参数解析出,传递给脚本中叫argMap
的全局变量。
继续阅读: 自定义指令 - 测试