我想從另一個使用正則表達式提取字符串。 我使用POSIX正則表達式函數(regcomp, regexec
...),我在拍攝一組失敗...你如何用正則表達式捕獲一個組?
例如,我們的模式是一樣簡單的東西"MAIL FROM:<(.*)>"
(與REG_EXTENDED
CFLAGS)
我想「<」之間捕捉一切和「>」
我的問題是regmatch_t
給我的整個模式的邊界(MAIL FROM:< ...>),而不是括號之間只是什麼...
我錯過了什麼?
由於提前,
編輯:一些代碼
#define SENDER_REGEX "MAIL FROM:<(.*)>"
int main(int ac, char **av)
{
regex_t regex;
int status;
regmatch_t pmatch[1];
if (regcomp(®ex, SENDER_REGEX, REG_ICASE|REG_EXTENDED) != 0)
printf("regcomp error\n");
status = regexec(®ex, av[1], 1, pmatch, 0);
regfree(®ex);
if (!status)
printf( "matched from %d (%c) to %d (%c)\n"
, pmatch[0].rm_so
, av[1][pmatch[0].rm_so]
, pmatch[0].rm_eo
, av[1][pmatch[0].rm_eo]
);
return (0);
}
輸出:
$./a.out "MAIL FROM:<abcd>$"
matched from 6 (M) to 22 ($)
溶液:
如RarrRarrRarr說,指數確實在pmatch[1].rm_so
pmatch[1].rm_eo
和
因此regmatch_t pmatch[1];
變得regmatch_t pmatch[2];
和regexec(®ex, av[1], 1, pmatch, 0);
變得regexec(®ex, av[1], 2, pmatch, 0);
謝謝:)
謝謝,這是問題:) – Sylvain 2010-04-05 06:52:16