测试已测试 | ✗ |
Lang语言 | Obj-CObjective C |
许可证 | MIT |
发布最后发布 | 2014年12月 |
由 Peter Hosey 维护。
这是 @jehna 的 VerbalExpressions 项目的 Objective-C 实现。这是一个原始实现;我仅复制了方法名称,没有更多。
创建一个 PRHVerbalExpression,然后将消息发送给它以设置选项和构建搜索模式。每个选项或模式消息返回 self
,因此您可以堆叠一系列这样的消息来描述模式。
每个 PRHVerbalExpression 都响应一系列匹配方法,您可以将其用于将模式应用于字符串。
例如
NSString *prefix = @"Hello";
NSString *suffix = @"Your attention please!";
NSString *entireString = [NSString stringWithFormat:@"%@, people of Earth!\n%@", prefix, suffix];
PRHVerbalExpression *expression = [[[[[[[
[PRHVerbalExpression new]
searchMultipleLines]
startOfLine]
then:prefix]
anything]
then:suffix]
endOfLine];
bool match = [expression matchesString:entireString];
在头文件和此文档中,“字面字符串”是不检查正则表达式元字符(或者如果有,是为了转义它们)的字符串。因此,例如,字面字符串 @"[^0-9]"
将匹配恰好六个字符(或者根本不匹配):一个开方括号,一个插入符号,一个零,一个连字符减号,一个九,和一个闭方括号。它不会匹配范围之外的任何单个字符。
对于字符类,原始 JavaScript 实现将包含两个参数的方法命名为 range
。
本版本用四个不同的方法替换了这一方法
characterClassWithRangeFrom:(unichar)from to:(unichar)to
extendCharacterClassWithRangeFrom:(unichar)from to:(unichar)to
characterClassWithCharacter:(unichar)ch
extendCharacterClassWithCharacter:(unichar)ch
例如,一个简单的格式化数字的表达式可能看起来像这样
[[[
[PRHVerbalExpression new]
characterClassWithRangeFrom:'0' to:'9']
extendCharacterClassWithCharacter:',']
extendCharacterClassWithCharacter:'.'];
(这将生成正则表达式 [0-9,.]
.)
我添加了创建组的方法
group:(id)literalStringOrVerbalExpression
nonCapturingGroup:(id)literalStringOrVerbalExpression
每个方法都接受字面字符串或 PRHVerbalExpression。
我添加了指定子表达式连续出现的最小和最大次数的方法
maybe:(id)literalStringOrVerbalExpression
(?
)zeroOrMoreOf:(id)literalStringOrVerbalExpression
(*
)oneOrMoreOf:(id)literalStringOrVerbalExpression
(+
)atLeast:(NSUInteger)min butNoMoreThan:(NSUInteger)max ofExpression:(id)literalStringOrVerbalExpression
({min,max}
)其中一些功能尚未实现,大多数功能也尚未经过测试。PRHVerbalExpression中任何简单地返回self
的方法都尚未实现。
此外,某些方法名称可以做更多记录性描述,以符合典型的Objective-C命名规范。
我最初的项目愿景是实现一些运行时hackery,以便无需嵌套方法调用。我仍然想尝试这一点,虽然我不确定如何处理无参数方法(如startOfLine
/endOfLine
)。
某些事情可以更稳健。例如,如果你在endOfLine
之后添加了任何内容(除了另一个子表达式),你可能会遇到麻烦。理想情况下,大多数方法应该替换并重新追加$
(如果存在的话)。
欢迎贡献。