This is a discussion on Regarding regular expressions in Solaris within the comp.unix.solaris forums, part of the Solaris Operating System category; --> Hi, Am writing one C program for one of my module and facing one problem with the regular expression ...
| |||||||
| FAQ | Members List | Calendar | Search | Today's Posts | Mark Forums Read |
| ||||
| Hi, Am writing one C program for one of my module and facing one problem with the regular expression functions provided by the library libgen.h in solaris. In this library we are having two functions to deal with the regular expressions char *regcmp(const char *string1, /* char *string2 */ , int /*(char*)0*/); ------this function is to compile the regular expression.In case of failure it will return NULL. char *regex(const char *re, const char *subject, /* char *ret0 */ ...);---------This function is used to execute the compiled expression against the subject string. Problem Compiled and executed the following regular expression using the above two function like below. char *name = regcmp("[A-Z]*",(char*)0); const char *newcursor = regex(name,"ps"); In the above case written the regular expression only to check whether the given value is capitals or not. To check this one I submitted the value "ps" in lower case. Still the regular expression is executing succefully wit out failure.In the above case it shold have to fail but still it is successful. The regex function is not returning NULL in this case. If anybody knows abot this please let me know. Regards Sunil. |
| |||
| On 2007-12-13 07:46:44 +0000, sunil <sunil.vvn@gmail.com> said: > Hi, > > Am writing one C program for one of my module and facing one problem > with the regular expression functions provided by the library libgen.h > in solaris. > > In this library we are having two functions to deal with > the regular expressions > > char *regcmp(const char *string1, /* char *string2 */ , > int /*(char*)0*/); ------this function is to compile the regular > expression.In case of failure it will return NULL. > > char *regex(const char *re, const char *subject, /* > char *ret0 */ ...);---------This function is used to execute the > compiled expression against the subject string. > > > Problem > > Compiled and executed the following regular expression > using the above two function like below. > > char *name = regcmp("[A-Z]*",(char*)0); > const char *newcursor = regex(name,"ps"); > > In the above case written the regular expression only to check > whether the given value is capitals or not. To check this one I > submitted the value "ps" in lower case. Still the regular expression > is executing succefully wit out failure.In the above case it shold > have to fail but still it is successful. The regex function is not > returning NULL in this case. The expression "[A-Z]*" will also match, because the * means *0* or more of the preceding expression. Zero upper-case characters matches a lower-case string :-) You should read regexp(5) (as recommended by the regcmp(1) man page) and regex(5). A cursory glance suggests that anchoring will help: "^[A-Z]+$" Cheers, Chris |
| ||||
| sunil wrote: > Hi, > > Am writing one C program for one of my module and facing one problem > with the regular expression functions provided by the library libgen.h > in solaris. > > In this library we are having two functions to deal with > the regular expressions > > char *regcmp(const char *string1, /* char *string2 */ , > int /*(char*)0*/); ------this function is to compile the regular > expression.In case of failure it will return NULL. > > char *regex(const char *re, const char *subject, /* > char *ret0 */ ...);---------This function is used to execute the > compiled expression against the subject string. > > > Problem > > Compiled and executed the following regular expression > using the above two function like below. > > char *name = regcmp("[A-Z]*",(char*)0); > const char *newcursor = regex(name,"ps"); > > In the above case written the regular expression only to check > whether the given value is capitals or not. To check this one I > submitted the value "ps" in lower case. Still the regular expression > is executing succefully wit out failure.In the above case it shold > have to fail but still it is successful. The regex function is not > returning NULL in this case. > > If anybody knows abot this please let me know. > > > Regards > Sunil. "[A-Z]* matches zero or more occurrences of a capital letter. Thus you got the correct result! You should try a more specific RE, such as "^[A-Z][A-Z]*$", or (depending on your RE dialect) "^[A-Z]+$". If a zero length string should return true use "^[A-Z]*$". Ranges such as "[A-Z]" are only guaranteed to work if the locale is set to "C" (or "POSIX", which is the same). (I ran into problems when my locale was set to en_US.) The proper POSIX RE is: "^[[:upper:]]*$", which will match an empty string too. -Wayne |
| Thread Tools | |
| Display Modes | |
|
|