1

\w パターンが一致しないのはなぜですか?多くのパターンが機能しません。例:\s

私のOSはMacです

たぶん何かが足りないと思います。

そのコードは char 'w' のみに一致し、サムではありません。

助けてくれてありがとう

//
//  main.c
//  test
//
//  Created by SamPeng on 12-9-22.
//  Copyright (c) 2012年 SamPeng. All rights reserved.
//

#include <stdio.h>
#include <sys/types.h>
#include <regex.h>
#include <string.h>

int main(int argc, const char * argv[])
{
    int status,i;
    int cflags = REG_EXTENDED;
    regmatch_t pmatch[1];
    const size_t nmatch=1;
    regex_t reg;
    const char *pattern="\\w";
    char *buf = "sam@sampengw.org";

    regcomp(&reg, pattern, cflags);
    status = regexec(&reg, buf, nmatch, pmatch, 0);

    if(status == REG_NOMATCH)
        printf("No Match \n");
    else if(status == 0){
        printf("Match:\n");
        for (i=pmatch[0].rm_so; i<pmatch[0].rm_eo; ++i) {
            putchar(buf[i]);
        }
        printf("\n");
    }
    regfree(&reg);
    return 0;
}

補足: はい、この作業が POSIX Base reg であることは知っていますが、これをどのように変更しますか? 強力な正規表現は使いたくない

4

2 に答える 2

1

\Glib 正規表現は、一般的な文字クラスの一般的な省略形をサポートしていません。POSIX 文字クラス (例: [[:space:]]) をサポートしているので、必要に応じて使用できます。それ以外の場合は、省略形を使用せずに文字セットを明示的に使用できます (例: [ \t\n])。

これについては、正規表現のマニュアル ページに非常に優れたドキュメントがあります。

于 2012-10-20T16:22:30.173 に答える
1

glib regex モジュールは 1986 年に標準化されたため、最新の正規表現構文の小さなサブセットのみを許可するPOSIX拡張正規表現\wをサポートしてい\sます。ライブラリ

于 2012-10-20T16:43:54.773 に答える