GNU bug report logs -
#5970
regex won't do lazy matching
Previous Next
Reported by: a g <mewalig <at> gmail.com>
Date: Mon, 19 Apr 2010 02:02:01 UTC
Severity: normal
Done: Bob Proulx <bob <at> proulx.com>
Bug is archived. No further changes may be made.
Full log
Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):
[Message part 1 (text/plain, inline)]
This may be a usage problem, but it does not exist with other regex packages
(such as slre) and I can't find anything in the documentation to indicate
that the syntax should be different for coreutils. I am using coreutils 8.4
on ubuntu AMD64, version 9.10. I cannot get the coreutils regex matcher to
do lazy matching. Here is my code:
/**** regex_test.cpp ***/
#include <stdio.h>
#include <stdlib.h>
#include "xalloc.h"
#include "regex.h"
// compile:
// gcc -I coreutils-8.4/lib/ -c regex_test.cpp
// g++ -o regex_test regex_test.o coreutils-8.4/lib/xmalloc.o
coreutils-8.4/lib/xalloc-die.o coreutils-8.4/lib/exitfail.o
coreutils-8.4/lib/regex.o
void print_regerror (int errcode, regex_t *compiled)
{
size_t length = regerror (errcode, compiled, NULL, 0);
char *buffer = (char *)xmalloc (length);
if(!buffer) printf("error: regerror malloc failed!\n");
else {
(void) regerror (errcode, compiled, buffer, length);
printf("error: %s\n", buffer);
free(buffer);
}
}
int main(int argc, char *argv[]){
if(argc < 3) printf("usage: regex_test pattern string\n");
else {
regex_t rx;
int err;
if((err = regcomp(&rx, argv[1], REG_EXTENDED)))
print_regerror(err, &rx);
else {
regmatch_t matches[4];
if(!regexec(&rx, argv[2], 4, matches, 0)) {
int i;
printf("match! \n");
for(i = 0; i < 4; i++) {
if(matches[i].rm_so != -1)
printf(" s:%i, e:%i", matches[i].rm_so, matches[i].rm_eo);
}
printf("\n");
} else printf("match failed.\n");
regfree(&rx);
}
}
}
/********/
Here is the problem. If you execute:
regex_test "a[^x]*?a" "a1a2a"
then you get:
match!
s:0, e:5
But, you should get the same result as when you execute *regex_test
"a[^x]*?a" "a1a"*-- that is:
match!
s:0, e:3
Please advise. Thank you!
[Message part 2 (text/html, inline)]
This bug report was last modified 15 years and 24 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.