8

ここで正規表現が最善の解決策であるかどうかはわかりませんが、十分に論理的であるように思われます。これを実際に実装する方法がわかりません。

基本的に、ユーザーがメソッド名を入力し、各文字入力後に有効性を解析できるようにする必要があります。有効な関数形式を正規表現として定義しましたが、2つが一致するかどうかをテストするのは簡単です。問題は、「これまでのところ、これは有効です」とユーザーに知らせるために、部分一致を実行できるようにしたいということです。

例えば、

+(NSString *)thisIsAValid:(ObjectiveC *)method;

有効な方法です。次のような単純な正規表現文字列と一致させることができます

[\+-]\(w+\s*\*?\)\w+....etc...

。しかし、私は同じ正規表現文字列を「一致」させることができるようにしたいと思います

+(NSStr

(私が理解しているのは、正規表現を使用する逆の方法のようなものです)。私はまだ正規表現を一致させたくありません

Q)(NStr

標準の正規表現関数を使用してこのようなものを実装する方法はありますか、それとももっと抜本的なことをする必要がありますか?

本当にありがとう!皆さんはかけがえのない存在です。


さらに考えた後、質問をもう少し明確に(そしてもう少し簡潔に)できると思います。通常、正規表現を使用してテキストのパターンを探します。つまり、この段落に「猫」または「ベビーベッド」が何回表示されますか。逆のことをしたいのですが、正規表現の「中」の文字列を探してください。つまり、最初からこの文字列のどれだけがこの正規表現に一致するかです。最終的に、文字列が問題の正規表現と一致しなくなるインデックスを返したいと思います。

4

2 に答える 2

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
于 2012-03-04T13:50:49.873 に答える
0

正規表現を取得して分割し、正規表現ABCDが新しい正規表現になるようにスクリプトを作成します。^(ABCD | ABC | AB | A)$

括弧は扱いにくいので、可能であれば避けてください。それ以外の場合は、おそらく正しい量のクロージングパレンを追加するだけでそれを説明する必要があります。また、\ * +のようなものを分割しないように、正規表現演算子でABCD文字列をトークン化する必要があります。

于 2012-01-18T12:54:19.473 に答える