My apologies, I just signed up for this list, so I can't preserve the
continuity of the thread.

The ILE C Runtime on IBM i follows the XBD specification for regular
expressions, defined here:

The problem with your regular expression is the use of the '\w' and '\W'
specifiers. These specifiers do not exist in the XBD regular expression
specification. If these specifiers are used like they are in PERL, '\w'
means any word character, and '\W' means any non-word character, so '[\w
\W]' would be equivalent to '.'. Alternatively you could use the character
class expressions (like [:alpha:] which would match any alphabetic
character). Here are two adaptations of your expression that would work on
IBM i:


I hope that helps.

Aaron Albertson
IBM Rochester, MN 55901

Terrence Enger
<tenger@iseries-g> To
Sent by: C programming iSeries / AS400
c400-l-bounces <c400-l@xxxxxxxxxxxx> cc
Re: [C400-L] RegExp I give up
07/22/2009 01:34

Please respond to
C programming
iSeries / AS400

On Wed, 2009-07-22 at 08:04 -0700, Spencer Elliott wrote:
I have the following regular expression:

I am familiar with \w as shorthand for [_A-Za-z0-9] and the web site you
cite below accepts space or hyphen and I know not what else for \W.
Anyway, the expression
[-A-Za-z0-9_ ]+
matches the middle part of your test input.

This expression test as true against the following string:
MDB MO3-09 Final.PDF

I run the same expression and string through the iSeries RegExp APIs and
it fails(returns 1).

Does anyone have any idea where there is a online test that matches the
IBM APIs or can figure out what I am doing incorrectly?

Even a quick reference guide to the details on the iSeries would be a
help. I am sure I am just overlooking it, but it is frustrating to be
reduced to experimentation.


BTW: The OCEAN conference was great!

My program works with another expression to test email addresses.


/*---( Compile pattern )---*/
rc = regcomp(&preg, wrkPattern, REG_EXTENDED);
if (rc != 0) {
regerror(rc, &preg, errMsg, sizeof(errMsg));
PatError(100, (char *) pattern, (char *) errMsg);


if (matchString != inpString) {
free((void *) matchString);
matchString = NULL;
return (0);

/*---( Run Pattern )---*/
if ( (rc = regexec(&preg, matchString, nmatch, pmatch, 0)) != 0 ) {
regerror(rc, &preg, errMsg, sizeof(errMsg));

This is the C programming iSeries / AS400 (C400-L) mailing list
To post a message email: C400-L@xxxxxxxxxxxx
To subscribe, unsubscribe, or change list options,
or email: C400-L-request@xxxxxxxxxxxx
Before posting, please take a moment to review the archives

This thread ...


Follow On AppleNews
Return to Archive home page | Return to MIDRANGE.COM home page

This mailing list archive is Copyright 1997-2019 by and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].