4 |
|
|
5 |
/* This is a demonstration program to illustrate the most straightforward ways |
/* This is a demonstration program to illustrate the most straightforward ways |
6 |
of calling the PCRE regular expression library from a C program. See the |
of calling the PCRE regular expression library from a C program. See the |
7 |
pcresample documentation for a short discussion ("man pcresample" if you have |
pcresample documentation for a short discussion ("man pcresample" if you have |
8 |
the PCRE man pages installed). |
the PCRE man pages installed). |
9 |
|
|
10 |
In Unix-like environments, compile this program thuswise: |
In Unix-like environments, compile this program thuswise: |
223 |
* * |
* * |
224 |
* If the previous match WAS for an empty string, we can't do that, as it * |
* If the previous match WAS for an empty string, we can't do that, as it * |
225 |
* would lead to an infinite loop. Instead, a special call of pcre_exec() * |
* would lead to an infinite loop. Instead, a special call of pcre_exec() * |
226 |
* is made with the PCRE_NOTEMPTY and PCRE_ANCHORED flags set. The first * |
* is made with the PCRE_NOTEMPTY_ATSTART and PCRE_ANCHORED flags set. * |
227 |
* of these tells PCRE that an empty string is not a valid match; other * |
* The first of these tells PCRE that an empty string at the start of the * |
228 |
* possibilities must be tried. The second flag restricts PCRE to one * |
* subject is not a valid match; other possibilities must be tried. The * |
229 |
* match attempt at the initial string position. If this match succeeds, * |
* second flag restricts PCRE to one match attempt at the initial string * |
230 |
* an alternative to the empty string match has been found, and we can * |
* position. If this match succeeds, an alternative to the empty string * |
231 |
* proceed round the loop. * |
* match has been found, and we can proceed round the loop. * |
232 |
*************************************************************************/ |
*************************************************************************/ |
233 |
|
|
234 |
if (!find_all) |
if (!find_all) |
251 |
if (ovector[0] == ovector[1]) |
if (ovector[0] == ovector[1]) |
252 |
{ |
{ |
253 |
if (ovector[0] == subject_length) break; |
if (ovector[0] == subject_length) break; |
254 |
options = PCRE_NOTEMPTY | PCRE_ANCHORED; |
options = PCRE_NOTEMPTY_ATSTART | PCRE_ANCHORED; |
255 |
} |
} |
256 |
|
|
257 |
/* Run the next matching operation */ |
/* Run the next matching operation */ |