最佳实践:部分正则表达式匹配

Pla*_*ech 8 regex parsing coding-style objective-c regexkit

我不确定正则表达式是否是最好的解决方案,但它们看起来合乎逻辑; 我只是不确定如何实际实现这一点.

基本上,我希望我的用户能够键入一个方法名称,并在每个字符输入后解析它的有效性.我已经将有效的函数格式定义为正则表达式,并且很容易测试两者是否匹配.麻烦的是,我希望能够进行部分匹配,以便让用户知道"到目前为止,这是有效的".

例如,

+(NSString *)thisIsAValid:(ObjectiveC *)method;
Run Code Online (Sandbox Code Playgroud)

是一种有效的方法.它可以通过简单的正则表达式字符串来匹配

[\+-]\(w+\s*\*?\)\w+....etc...
Run Code Online (Sandbox Code Playgroud)

.但我希望能够有相同的正则表达字符串"匹配"

+(NSStr
Run Code Online (Sandbox Code Playgroud)

(我意识到这是使用正则表达式的一种倒退方式).我仍然不希望正则表达式匹配

Q)(NStr
Run Code Online (Sandbox Code Playgroud)

有没有办法用标准的正则表达式函数实现这样的东西,还是我必须做一些更激烈的事情?

非常感谢!你们是无价的.


在进一步思考之后,我想我可以让我的问题更清晰一些(以及更简洁一点):通常,使用正则表达式来查找文本中的模式.也就是说,"cat"或"cot"在这一段中出现了多少次.我希望做相反的事情,寻找一个字符串"in"正则表达式.也就是说,从一开始就从这个正则表达式开始匹配这个字符串的多少.最后,我想返回字符串停止与所讨论的正则表达式匹配的索引.

Mat*_*man 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;
}
Run Code Online (Sandbox Code Playgroud)

将打印:

A: match or partial
AB: match or partial
ABC: match or partial
ABD: no match
Run Code Online (Sandbox Code Playgroud)