Mercurial > hg > th-libs
comparison th_regex.c @ 641:9a1ed82abefd
Fix parsing of +? and *?.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Fri, 24 Jan 2020 09:36:43 +0200 |
parents | 9e1f9e1d1487 |
children | 3a35db5c1873 |
comparison
equal
deleted
inserted
replaced
640:9e1f9e1d1487 | 641:9a1ed82abefd |
---|---|
421 if ((res = th_regex_parse_ctx_get_prev_node(&ctx, &pnode)) != THERR_OK) | 421 if ((res = th_regex_parse_ctx_get_prev_node(&ctx, &pnode)) != THERR_OK) |
422 goto exit; | 422 goto exit; |
423 | 423 |
424 if (cch == '?') | 424 if (cch == '?') |
425 { | 425 { |
426 // Check if previous was a count | 426 // Check if previous was a count ("*?" or "+?") |
427 pnode->mode = (pnode->mode == TH_RE_MATCH_COUNT_GREEDY) ? | 427 if (pnode->mode == TH_RE_MATCH_COUNT_GREEDY) |
428 TH_RE_MATCH_COUNT_NONGREEDY : TH_RE_MATCH_COUNT_GREEDY; | 428 pnode->mode = TH_RE_MATCH_COUNT_NONGREEDY; |
429 | 429 else |
430 // Previous token is optional (repeat 0-1 times) | 430 if (pnode->mode == TH_RE_MATCH_COUNT_NONGREEDY) |
431 pnode->repeatMin = 0; | 431 { |
432 pnode->repeatMax = 1; | 432 res = THERR_INVALID_DATA; |
433 goto exit; | |
434 } | |
435 else | |
436 { | |
437 // Previous token is optional (repeat 0-1 times) | |
438 pnode->mode = TH_RE_MATCH_COUNT_NONGREEDY; | |
439 pnode->repeatMin = 0; | |
440 pnode->repeatMax = 1; | |
441 } | |
433 } | 442 } |
434 else | 443 else |
435 { | 444 { |
436 // Check if previous was a count | 445 // Check if previous was a count ("**", "*+", etc.) |
437 if (pnode->mode == TH_RE_MATCH_COUNT_GREEDY || | 446 if (pnode->mode == TH_RE_MATCH_COUNT_GREEDY || |
438 pnode->mode == TH_RE_MATCH_COUNT_NONGREEDY) | 447 pnode->mode == TH_RE_MATCH_COUNT_NONGREEDY) |
439 { | 448 { |
440 res = THERR_INVALID_DATA; | 449 res = THERR_INVALID_DATA; |
441 goto exit; | 450 goto exit; |