我不确定正则表达式是否是最佳解决方案,但它们似乎足够合理;我只是不确定如何实现这一点。
基本上,我希望我的用户能够键入一个方法名称,并在每个字符输入后解析它的有效性。我已经将有效的函数格式定义为正则表达式,并且很容易测试两者是否匹配。麻烦的是,我希望能够进行部分匹配,以便让用户知道“到目前为止,这是有效的”。
例如,
+(NSString *)thisIsAValid:(ObjectiveC *)method;
是一种有效的方法。它可以通过简单的正则表达式字符串匹配,如
[\+-]\(w+\s*\*?\)\w+....etc...
。但我希望能够使用相同的正则表达式字符串“匹配”
+(NSStr
(我意识到这是使用正则表达式的一种倒退方式)。我仍然不希望正则表达式匹配
Q)(NStr
有没有办法用标准的正则表达式函数实现这样的东西,还是我必须做一些更激烈的事情呢?
非常感谢!你们是非常宝贵的。
经过进一步的思考,我想我可以让我的问题更清晰一些(以及更简洁一点):通常,人们使用正则表达式来寻找文本中的模式。即,本段中出现“猫”或“婴儿床”的次数。我希望做相反的事情,寻找一个字符串“in”正则表达式。也就是说,从一开始就从这个正则表达式开始匹配这个字符串的多少。最后,我想返回字符串停止与所讨论的正则表达式匹配的索引。
答案 0 :(得分:1)
RegexKit接缝使用PCRE,因此您可以尝试直接使用PCRE,因为它支持部分匹配。
#include <stdio.h>
#include <pcre.h>
void test_match(pcre *re, char *subject);
void test_match(pcre *re, char *subject) {
int rc = pcre_exec(re, NULL, subject, (int)strlen(subject),
0, PCRE_PARTIAL, NULL, 0);
printf("%s: %s\n", subject,
rc == 0 || rc == PCRE_ERROR_PARTIAL ?
"match or partial" : "no match");
}
int main (int argc, const char * argv[]) {
pcre *re;
const char *errstr;
int erroffset;
re = pcre_compile("^ABC$", 0, &errstr, &erroffset, NULL);
test_match(re, "A");
test_match(re, "AB");
test_match(re, "ABC");
test_match(re, "ABD");
return 0;
}
将打印:
A: match or partial
AB: match or partial
ABC: match or partial
ABD: no match
答案 1 :(得分:0)
我只是编写一个脚本来获取正则表达式并将其拆分以便正则表达式 A B C D 成为新的正则表达式: ^(ABCD | ABC | AB | A)$
括号将是棘手的,所以尽可能避免使用它们。否则你只需要添加正确数量的关闭数据就可以解决这个问题。此外,您还必须通过正则表达式运算符对ABCD字符串进行标记,这样您就不会拆分类似\ * +
的内容。