Current Path: > > usr > > include
Operation : Linux premium107.web-hosting.com 4.18.0-553.44.1.lve.el8.x86_64 #1 SMP Thu Mar 13 14:29:12 UTC 2025 x86_64 Software : Apache Server IP : 198.54.126.246 | Your IP: 216.73.216.181 Domains : 1034 Domain(s) Permission : [ 0755 ]
| Name | Type | Size | Last Modified | Actions |
|---|---|---|---|---|
| GL | Directory | - | - | |
| X11 | Directory | - | - | |
| apache2 | Directory | - | - | |
| arpa | Directory | - | - | |
| asm | Directory | - | - | |
| asm-generic | Directory | - | - | |
| bind9 | Directory | - | - | |
| bits | Directory | - | - | |
| bsock | Directory | - | - | |
| c++ | Directory | - | - | |
| criu | Directory | - | - | |
| curl | Directory | - | - | |
| drm | Directory | - | - | |
| e2p | Directory | - | - | |
| et | Directory | - | - | |
| event2 | Directory | - | - | |
| ext2fs | Directory | - | - | |
| finclude | Directory | - | - | |
| fontconfig | Directory | - | - | |
| freetype2 | Directory | - | - | |
| fstrm | Directory | - | - | |
| gdb | Directory | - | - | |
| gdbm | Directory | - | - | |
| gnu | Directory | - | - | |
| Directory | - | - | ||
| gssapi | Directory | - | - | |
| gssrpc | Directory | - | - | |
| jemalloc | Directory | - | - | |
| json-c | Directory | - | - | |
| kadm5 | Directory | - | - | |
| krb5 | Directory | - | - | |
| libdb | Directory | - | - | |
| libexslt | Directory | - | - | |
| libltdl | Directory | - | - | |
| libpng16 | Directory | - | - | |
| libxml2 | Directory | - | - | |
| libxslt | Directory | - | - | |
| linux | Directory | - | - | |
| lua-5.1 | Directory | - | - | |
| lzma | Directory | - | - | |
| misc | Directory | - | - | |
| mtd | Directory | - | - | |
| mysql | Directory | - | - | |
| ncurses | Directory | - | - | |
| ncursesw | Directory | - | - | |
| net | Directory | - | - | |
| netash | Directory | - | - | |
| netatalk | Directory | - | - | |
| netax25 | Directory | - | - | |
| neteconet | Directory | - | - | |
| netinet | Directory | - | - | |
| netipx | Directory | - | - | |
| netiucv | Directory | - | - | |
| netpacket | Directory | - | - | |
| netrom | Directory | - | - | |
| netrose | Directory | - | - | |
| nfs | Directory | - | - | |
| openssl | Directory | - | - | |
| perf | Directory | - | - | |
| protobuf-c | Directory | - | - | |
| protocols | Directory | - | - | |
| python2.7 | Directory | - | - | |
| python3.6m | Directory | - | - | |
| python3.8 | Directory | - | - | |
| rdma | Directory | - | - | |
| rpc | Directory | - | - | |
| sasl | Directory | - | - | |
| scsi | Directory | - | - | |
| security | Directory | - | - | |
| selinux | Directory | - | - | |
| sepol | Directory | - | - | |
| sound | Directory | - | - | |
| sys | Directory | - | - | |
| uuid | Directory | - | - | |
| video | Directory | - | - | |
| webp | Directory | - | - | |
| xcb | Directory | - | - | |
| xen | Directory | - | - | |
| FlexLexer.h | File | 6893 bytes | October 12 2019 12:33:17. | |
| a.out.h | File | 4350 bytes | December 08 2025 09:36:36. | |
| aio.h | File | 7456 bytes | December 08 2025 09:36:48. | |
| aliases.h | File | 2031 bytes | December 08 2025 09:36:49. | |
| alloca.h | File | 1203 bytes | December 08 2025 09:36:34. | |
| ar.h | File | 1730 bytes | December 08 2025 09:36:36. | |
| argp.h | File | 25414 bytes | December 08 2025 09:36:48. | |
| argz.h | File | 6050 bytes | December 08 2025 09:36:35. | |
| assert.h | File | 4561 bytes | December 08 2025 09:36:33. | |
| autosprintf.h | File | 2383 bytes | November 18 2019 17:16:51. | |
| byteswap.h | File | 1404 bytes | December 08 2025 09:36:35. | |
| bzlib.h | File | 6245 bytes | September 10 2010 23:08:42. | |
| com_err.h | File | 2118 bytes | March 21 2020 04:24:04. | |
| complex.h | File | 7163 bytes | December 08 2025 09:36:34. | |
| cpio.h | File | 2267 bytes | December 08 2025 09:36:36. | |
| cpuidle.h | File | 844 bytes | December 10 2025 14:18:41. | |
| crypt.h | File | 9118 bytes | October 09 2021 04:04:04. | |
| ctype.h | File | 10963 bytes | December 08 2025 09:36:33. | |
| curses.h | File | 99625 bytes | October 14 2023 18:54:42. | |
| cursesapp.h | File | 6775 bytes | October 14 2023 18:54:42. | |
| cursesf.h | File | 27849 bytes | October 14 2023 18:54:42. | |
| cursesm.h | File | 19677 bytes | October 14 2023 18:54:42. | |
| cursesp.h | File | 8601 bytes | October 14 2023 18:54:42. | |
| cursesw.h | File | 49719 bytes | October 14 2023 18:54:42. | |
| cursslk.h | File | 7304 bytes | October 14 2023 18:54:42. | |
| db.h | File | 123105 bytes | September 21 2021 16:29:14. | |
| db_185.h | File | 5983 bytes | September 21 2021 16:29:14. | |
| dbm.h | File | 1414 bytes | October 08 2022 13:22:08. | |
| dirent.h | File | 12484 bytes | December 08 2025 09:36:35. | |
| dlfcn.h | File | 7238 bytes | December 08 2025 09:36:34. | |
| elf.h | File | 174828 bytes | December 08 2025 09:36:50. | |
| endian.h | File | 3189 bytes | December 08 2025 09:36:35. | |
| entities.h | File | 4930 bytes | August 30 2017 11:05:54. | |
| envz.h | File | 2866 bytes | December 08 2025 09:36:35. | |
| err.h | File | 2209 bytes | December 08 2025 09:36:36. | |
| errno.h | File | 1678 bytes | December 08 2025 09:36:34. | |
| error.h | File | 2039 bytes | December 08 2025 09:36:36. | |
| eti.h | File | 2891 bytes | October 14 2023 18:54:42. | |
| etip.h | File | 9702 bytes | October 14 2023 18:54:42. | |
| evdns.h | File | 2019 bytes | October 12 2019 00:29:31. | |
| event.h | File | 2744 bytes | October 12 2019 00:29:31. | |
| evhttp.h | File | 2035 bytes | October 12 2019 00:29:31. | |
| evrpc.h | File | 2015 bytes | October 12 2019 00:29:31. | |
| evutil.h | File | 1782 bytes | October 12 2019 00:29:31. | |
| execinfo.h | File | 1522 bytes | December 08 2025 09:36:48. | |
| expat.h | File | 44273 bytes | November 20 2025 07:31:32. | |
| expat_config.h | File | 3910 bytes | November 20 2025 07:31:32. | |
| expat_external.h | File | 6029 bytes | November 20 2025 07:31:32. | |
| fcntl.h | File | 10958 bytes | December 08 2025 09:36:36. | |
| features.h | File | 16062 bytes | December 08 2025 09:36:29. | |
| fenv.h | File | 5857 bytes | December 08 2025 09:36:34. | |
| fmtmsg.h | File | 3239 bytes | December 08 2025 09:36:34. | |
| fnmatch.h | File | 2295 bytes | December 08 2025 09:36:36. | |
| form.h | File | 18601 bytes | October 14 2023 18:54:42. | |
| fpu_control.h | File | 3583 bytes | December 08 2025 09:36:34. | |
| fstab.h | File | 3111 bytes | December 08 2025 09:36:36. | |
| fstrm.h | File | 13017 bytes | March 11 2019 20:58:34. | |
| fts.h | File | 8372 bytes | December 08 2025 09:36:36. | |
| ftw.h | File | 5251 bytes | December 08 2025 09:36:36. | |
| gconv.h | File | 4410 bytes | December 08 2025 09:36:30. | |
| gcrypt.h | File | 70361 bytes | June 28 2022 11:54:07. | |
| gd.h | File | 57777 bytes | August 30 2017 11:05:54. | |
| gd_color_map.h | File | 478 bytes | August 30 2017 11:05:54. | |
| gd_errors.h | File | 1503 bytes | August 30 2017 11:05:54. | |
| gd_io.h | File | 3125 bytes | August 30 2017 11:05:54. | |
| gdbm.h | File | 10345 bytes | October 08 2022 13:22:07. | |
| gdcache.h | File | 2898 bytes | August 30 2017 11:05:54. | |
| gdfontg.h | File | 553 bytes | August 30 2017 11:05:54. | |
| gdfontl.h | File | 551 bytes | August 30 2017 11:05:54. | |
| gdfontmb.h | File | 519 bytes | August 30 2017 11:05:54. | |
| gdfonts.h | File | 515 bytes | August 30 2017 11:05:54. | |
| gdfontt.h | File | 546 bytes | August 30 2017 11:05:54. | |
| gdfx.h | File | 497 bytes | August 30 2017 11:05:54. | |
| gdpp.h | File | 52162 bytes | August 30 2017 11:05:54. | |
| getopt.h | File | 1468 bytes | December 08 2025 09:36:36. | |
| gettext-po.h | File | 15534 bytes | November 18 2019 17:17:03. | |
| glob.h | File | 6614 bytes | December 08 2025 09:36:36. | |
| gnu-versions.h | File | 2342 bytes | December 08 2025 09:36:29. | |
| gnumake.h | File | 2912 bytes | April 18 2022 16:38:33. | |
| gpg-error.h | File | 67879 bytes | October 12 2019 12:20:46. | |
| gpgrt.h | File | 67879 bytes | October 12 2019 12:20:46. | |
| grp.h | File | 6686 bytes | December 08 2025 09:36:35. | |
| gshadow.h | File | 4528 bytes | December 08 2025 09:36:47. | |
| gssapi.h | File | 181 bytes | June 03 2025 02:06:27. | |
| iconv.h | File | 1857 bytes | December 08 2025 09:36:30. | |
| idn-free.h | File | 2472 bytes | October 13 2019 16:55:34. | |
| idn-int.h | File | 20 bytes | October 13 2019 16:55:34. | |
| idna.h | File | 3564 bytes | October 13 2019 16:55:34. | |
| ieee754.h | File | 4910 bytes | December 08 2025 09:36:34. | |
| ifaddrs.h | File | 2840 bytes | December 08 2025 09:36:49. | |
| inttypes.h | File | 11892 bytes | December 08 2025 09:36:34. | |
| jconfig-64.h | File | 2225 bytes | May 14 2025 12:43:01. | |
| jconfig.h | File | 246 bytes | May 14 2025 12:43:01. | |
| jerror.h | File | 15088 bytes | May 14 2025 12:43:01. | |
| jmorecfg.h | File | 15049 bytes | May 14 2025 12:43:01. | |
| jpegint.h | File | 15586 bytes | May 14 2025 12:43:01. | |
| jpeglib.h | File | 49875 bytes | May 14 2025 12:43:01. | |
| kdb.h | File | 69285 bytes | June 03 2025 02:06:27. | |
| keyutils.h | File | 7698 bytes | October 08 2021 13:50:54. | |
| krad.h | File | 8933 bytes | June 03 2025 02:06:27. | |
| krb5.h | File | 402 bytes | June 03 2025 02:06:27. | |
| langinfo.h | File | 17848 bytes | December 08 2025 09:36:30. | |
| lastlog.h | File | 126 bytes | December 08 2025 09:36:50. | |
| lber.h | File | 15311 bytes | March 11 2025 09:44:02. | |
| lber_types.h | File | 1468 bytes | March 11 2025 09:44:02. | |
| ldap.h | File | 65096 bytes | March 11 2025 09:44:02. | |
| ldap_cdefs.h | File | 9466 bytes | March 11 2025 09:44:02. | |
| ldap_features.h | File | 1814 bytes | March 11 2025 09:44:03. | |
| ldap_schema.h | File | 9450 bytes | March 11 2025 09:44:02. | |
| ldap_utf8.h | File | 3468 bytes | March 11 2025 09:44:02. | |
| ldif.h | File | 4692 bytes | March 11 2025 09:44:03. | |
| libaio.h | File | 8937 bytes | November 13 2019 13:59:49. | |
| libgen.h | File | 1385 bytes | December 08 2025 09:36:36. | |
| libintl.h | File | 4579 bytes | December 08 2025 09:36:33. | |
| limits.h | File | 5412 bytes | December 08 2025 09:36:29. | |
| link.h | File | 7218 bytes | December 08 2025 09:36:50. | |
| locale.h | File | 7674 bytes | December 08 2025 09:36:30. | |
| ltdl.h | File | 5709 bytes | October 11 2019 14:55:29. | |
| lzma.h | File | 9817 bytes | April 29 2018 15:10:38. | |
| magic.h | File | 5588 bytes | October 07 2025 06:30:48. | |
| malloc.h | File | 6102 bytes | December 08 2025 09:36:35. | |
| math.h | File | 53318 bytes | December 08 2025 09:36:34. | |
| mcheck.h | File | 2434 bytes | December 08 2025 09:36:35. | |
| memory.h | File | 955 bytes | December 08 2025 09:36:35. | |
| menu.h | File | 12197 bytes | October 14 2023 18:54:42. | |
| mntent.h | File | 3358 bytes | December 08 2025 09:36:36. | |
| monetary.h | File | 1803 bytes | December 08 2025 09:36:34. | |
| mqueue.h | File | 3759 bytes | December 08 2025 09:36:48. | |
| nc_tparm.h | File | 4197 bytes | October 14 2023 18:54:42. | |
| ncurses.h | File | 99625 bytes | October 14 2023 18:54:42. | |
| ncurses_dll.h | File | 4277 bytes | October 14 2023 18:54:42. | |
| ndbm.h | File | 2454 bytes | October 08 2022 13:22:08. | |
| netdb.h | File | 28099 bytes | December 08 2025 09:36:49. | |
| nl_types.h | File | 1752 bytes | December 08 2025 09:36:33. | |
| nss.h | File | 1878 bytes | December 08 2025 09:36:49. | |
| obstack.h | File | 21306 bytes | December 08 2025 09:36:35. | |
| panel.h | File | 4123 bytes | October 14 2023 18:54:42. | |
| paths.h | File | 2977 bytes | December 08 2025 09:36:36. | |
| pcre.h | File | 31718 bytes | October 08 2021 19:17:42. | |
| pcre2.h | File | 44802 bytes | August 02 2022 16:07:28. | |
| pcre2posix.h | File | 5804 bytes | August 02 2022 16:07:28. | |
| pcre_scanner.h | File | 6600 bytes | October 08 2021 19:17:42. | |
| pcre_stringpiece.h | File | 6312 bytes | October 08 2021 19:17:42. | |
| pcrecpp.h | File | 26529 bytes | October 08 2021 19:17:42. | |
| pcrecpparg.h | File | 6783 bytes | October 08 2021 19:17:42. | |
| pcreposix.h | File | 5452 bytes | October 08 2021 19:17:42. | |
| png.h | File | 144149 bytes | January 07 2026 19:42:15. | |
| pngconf.h | File | 22845 bytes | January 07 2026 19:42:15. | |
| pnglibconf.h | File | 7567 bytes | January 07 2026 19:42:15. | |
| poll.h | File | 22 bytes | December 08 2025 09:36:36. | |
| pr29.h | File | 2123 bytes | October 13 2019 16:55:34. | |
| printf.h | File | 6800 bytes | December 08 2025 09:36:34. | |
| proc_service.h | File | 3476 bytes | December 08 2025 09:36:48. | |
| profile.h | File | 12154 bytes | June 03 2025 02:06:27. | |
| pthread.h | File | 41269 bytes | December 08 2025 09:36:35. | |
| pty.h | File | 1569 bytes | December 08 2025 09:36:50. | |
| punycode.h | File | 9384 bytes | October 13 2019 16:55:34. | |
| pwd.h | File | 6158 bytes | December 08 2025 09:36:35. | |
| re_comp.h | File | 962 bytes | December 08 2025 09:36:36. | |
| regex.h | File | 24715 bytes | December 08 2025 09:36:36. | |
| regexp.h | File | 1447 bytes | December 08 2025 09:36:36. | |
| resolv.h | File | 12153 bytes | December 08 2025 09:36:49. | |
| sched.h | File | 4732 bytes | December 08 2025 09:36:36. | |
| search.h | File | 5223 bytes | December 08 2025 09:36:36. | |
| semaphore.h | File | 2399 bytes | December 08 2025 09:36:35. | |
| setjmp.h | File | 3669 bytes | December 08 2025 09:36:34. | |
| sgtty.h | File | 1343 bytes | December 08 2025 09:36:36. | |
| shadow.h | File | 5471 bytes | December 08 2025 09:36:47. | |
| signal.h | File | 12243 bytes | December 08 2025 09:36:34. | |
| slapi-plugin.h | File | 38351 bytes | March 11 2025 09:44:03. | |
| spawn.h | File | 6690 bytes | December 08 2025 09:36:36. | |
| stab.h | File | 264 bytes | December 08 2025 09:36:36. | |
| stdc-predef.h | File | 2289 bytes | December 08 2025 09:36:29. | |
| stdint.h | File | 8469 bytes | December 08 2025 09:36:34. | |
| stdio.h | File | 30168 bytes | December 08 2025 09:36:34. | |
| stdio_ext.h | File | 2799 bytes | December 08 2025 09:36:34. | |
| stdlib.h | File | 35653 bytes | December 08 2025 09:36:34. | |
| string.h | File | 17587 bytes | December 08 2025 09:36:35. | |
| stringprep.h | File | 8227 bytes | October 13 2019 16:55:34. | |
| strings.h | File | 4752 bytes | December 08 2025 09:36:35. | |
| syscall.h | File | 25 bytes | December 08 2025 09:36:36. | |
| sysexits.h | File | 5232 bytes | December 08 2025 09:36:36. | |
| syslog.h | File | 24 bytes | December 08 2025 09:36:36. | |
| tar.h | File | 3785 bytes | December 08 2025 09:36:36. | |
| term.h | File | 41190 bytes | October 14 2023 18:54:42. | |
| term_entry.h | File | 8760 bytes | October 14 2023 18:54:42. | |
| termcap.h | File | 3473 bytes | October 14 2023 18:54:42. | |
| termio.h | File | 214 bytes | December 08 2025 09:36:36. | |
| termios.h | File | 3598 bytes | December 08 2025 09:36:36. | |
| tgmath.h | File | 31489 bytes | December 08 2025 09:36:34. | |
| thread_db.h | File | 16023 bytes | December 08 2025 09:36:48. | |
| threads.h | File | 6655 bytes | December 08 2025 09:36:35. | |
| tic.h | File | 13638 bytes | October 14 2023 18:54:42. | |
| tiff.h | File | 35983 bytes | November 11 2025 10:27:44. | |
| tiffconf-64.h | File | 3429 bytes | November 11 2025 10:27:44. | |
| tiffconf.h | File | 250 bytes | November 11 2025 10:27:46. | |
| tiffio.h | File | 23227 bytes | November 11 2025 10:27:44. | |
| tiffio.hxx | File | 1702 bytes | November 11 2025 10:27:44. | |
| tiffvers.h | File | 410 bytes | November 11 2025 10:27:44. | |
| time.h | File | 10360 bytes | December 08 2025 09:36:35. | |
| tld.h | File | 4650 bytes | October 13 2019 16:55:34. | |
| ttyent.h | File | 2494 bytes | December 08 2025 09:36:36. | |
| uchar.h | File | 2001 bytes | December 08 2025 09:36:35. | |
| ucontext.h | File | 2036 bytes | December 08 2025 09:36:34. | |
| ulimit.h | File | 1583 bytes | December 08 2025 09:36:36. | |
| unctrl.h | File | 3099 bytes | October 14 2023 18:54:42. | |
| unistd.h | File | 42738 bytes | December 08 2025 09:36:36. | |
| utime.h | File | 1501 bytes | December 08 2025 09:36:36. | |
| utmp.h | File | 3222 bytes | December 08 2025 09:36:50. | |
| utmpx.h | File | 4099 bytes | December 08 2025 09:36:50. | |
| values.h | File | 1955 bytes | December 08 2025 09:36:29. | |
| verto-module.h | File | 6640 bytes | October 08 2022 07:49:42. | |
| verto.h | File | 19437 bytes | October 08 2022 07:49:42. | |
| wait.h | File | 22 bytes | December 08 2025 09:36:36. | |
| wchar.h | File | 31111 bytes | December 08 2025 09:36:35. | |
| wctype.h | File | 5548 bytes | December 08 2025 09:36:36. | |
| wordexp.h | File | 2501 bytes | December 08 2025 09:36:36. | |
| zconf.h | File | 16262 bytes | October 11 2023 22:02:25. | |
| zlib.h | File | 96261 bytes | October 11 2023 22:02:25. |
// Copyright (c) 2005, Google Inc.
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
// * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
// * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following disclaimer
// in the documentation and/or other materials provided with the
// distribution.
// * Neither the name of Google Inc. nor the names of its
// contributors may be used to endorse or promote products derived from
// this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//
// Author: Sanjay Ghemawat
// Support for PCRE_XXX modifiers added by Giuseppe Maxia, July 2005
#ifndef _PCRECPP_H
#define _PCRECPP_H
// C++ interface to the pcre regular-expression library. RE supports
// Perl-style regular expressions (with extensions like \d, \w, \s,
// ...).
//
// -----------------------------------------------------------------------
// REGEXP SYNTAX:
//
// This module is part of the pcre library and hence supports its syntax
// for regular expressions.
//
// The syntax is pretty similar to Perl's. For those not familiar
// with Perl's regular expressions, here are some examples of the most
// commonly used extensions:
//
// "hello (\\w+) world" -- \w matches a "word" character
// "version (\\d+)" -- \d matches a digit
// "hello\\s+world" -- \s matches any whitespace character
// "\\b(\\w+)\\b" -- \b matches empty string at a word boundary
// "(?i)hello" -- (?i) turns on case-insensitive matching
// "/\\*(.*?)\\*/" -- .*? matches . minimum no. of times possible
//
// -----------------------------------------------------------------------
// MATCHING INTERFACE:
//
// The "FullMatch" operation checks that supplied text matches a
// supplied pattern exactly.
//
// Example: successful match
// pcrecpp::RE re("h.*o");
// re.FullMatch("hello");
//
// Example: unsuccessful match (requires full match):
// pcrecpp::RE re("e");
// !re.FullMatch("hello");
//
// Example: creating a temporary RE object:
// pcrecpp::RE("h.*o").FullMatch("hello");
//
// You can pass in a "const char*" or a "string" for "text". The
// examples below tend to use a const char*.
//
// You can, as in the different examples above, store the RE object
// explicitly in a variable or use a temporary RE object. The
// examples below use one mode or the other arbitrarily. Either
// could correctly be used for any of these examples.
//
// -----------------------------------------------------------------------
// MATCHING WITH SUB-STRING EXTRACTION:
//
// You can supply extra pointer arguments to extract matched subpieces.
//
// Example: extracts "ruby" into "s" and 1234 into "i"
// int i;
// string s;
// pcrecpp::RE re("(\\w+):(\\d+)");
// re.FullMatch("ruby:1234", &s, &i);
//
// Example: does not try to extract any extra sub-patterns
// re.FullMatch("ruby:1234", &s);
//
// Example: does not try to extract into NULL
// re.FullMatch("ruby:1234", NULL, &i);
//
// Example: integer overflow causes failure
// !re.FullMatch("ruby:1234567891234", NULL, &i);
//
// Example: fails because there aren't enough sub-patterns:
// !pcrecpp::RE("\\w+:\\d+").FullMatch("ruby:1234", &s);
//
// Example: fails because string cannot be stored in integer
// !pcrecpp::RE("(.*)").FullMatch("ruby", &i);
//
// The provided pointer arguments can be pointers to any scalar numeric
// type, or one of
// string (matched piece is copied to string)
// StringPiece (StringPiece is mutated to point to matched piece)
// T (where "bool T::ParseFrom(const char*, int)" exists)
// NULL (the corresponding matched sub-pattern is not copied)
//
// CAVEAT: An optional sub-pattern that does not exist in the matched
// string is assigned the empty string. Therefore, the following will
// return false (because the empty string is not a valid number):
// int number;
// pcrecpp::RE::FullMatch("abc", "[a-z]+(\\d+)?", &number);
//
// -----------------------------------------------------------------------
// DO_MATCH
//
// The matching interface supports at most 16 arguments per call.
// If you need more, consider using the more general interface
// pcrecpp::RE::DoMatch(). See pcrecpp.h for the signature for DoMatch.
//
// -----------------------------------------------------------------------
// PARTIAL MATCHES
//
// You can use the "PartialMatch" operation when you want the pattern
// to match any substring of the text.
//
// Example: simple search for a string:
// pcrecpp::RE("ell").PartialMatch("hello");
//
// Example: find first number in a string:
// int number;
// pcrecpp::RE re("(\\d+)");
// re.PartialMatch("x*100 + 20", &number);
// assert(number == 100);
//
// -----------------------------------------------------------------------
// UTF-8 AND THE MATCHING INTERFACE:
//
// By default, pattern and text are plain text, one byte per character.
// The UTF8 flag, passed to the constructor, causes both pattern
// and string to be treated as UTF-8 text, still a byte stream but
// potentially multiple bytes per character. In practice, the text
// is likelier to be UTF-8 than the pattern, but the match returned
// may depend on the UTF8 flag, so always use it when matching
// UTF8 text. E.g., "." will match one byte normally but with UTF8
// set may match up to three bytes of a multi-byte character.
//
// Example:
// pcrecpp::RE_Options options;
// options.set_utf8();
// pcrecpp::RE re(utf8_pattern, options);
// re.FullMatch(utf8_string);
//
// Example: using the convenience function UTF8():
// pcrecpp::RE re(utf8_pattern, pcrecpp::UTF8());
// re.FullMatch(utf8_string);
//
// NOTE: The UTF8 option is ignored if pcre was not configured with the
// --enable-utf8 flag.
//
// -----------------------------------------------------------------------
// PASSING MODIFIERS TO THE REGULAR EXPRESSION ENGINE
//
// PCRE defines some modifiers to change the behavior of the regular
// expression engine.
// The C++ wrapper defines an auxiliary class, RE_Options, as a vehicle
// to pass such modifiers to a RE class.
//
// Currently, the following modifiers are supported
//
// modifier description Perl corresponding
//
// PCRE_CASELESS case insensitive match /i
// PCRE_MULTILINE multiple lines match /m
// PCRE_DOTALL dot matches newlines /s
// PCRE_DOLLAR_ENDONLY $ matches only at end N/A
// PCRE_EXTRA strict escape parsing N/A
// PCRE_EXTENDED ignore whitespaces /x
// PCRE_UTF8 handles UTF8 chars built-in
// PCRE_UNGREEDY reverses * and *? N/A
// PCRE_NO_AUTO_CAPTURE disables matching parens N/A (*)
//
// (For a full account on how each modifier works, please check the
// PCRE API reference manual).
//
// (*) Both Perl and PCRE allow non matching parentheses by means of the
// "?:" modifier within the pattern itself. e.g. (?:ab|cd) does not
// capture, while (ab|cd) does.
//
// For each modifier, there are two member functions whose name is made
// out of the modifier in lowercase, without the "PCRE_" prefix. For
// instance, PCRE_CASELESS is handled by
// bool caseless(),
// which returns true if the modifier is set, and
// RE_Options & set_caseless(bool),
// which sets or unsets the modifier.
//
// Moreover, PCRE_EXTRA_MATCH_LIMIT can be accessed through the
// set_match_limit() and match_limit() member functions.
// Setting match_limit to a non-zero value will limit the executation of
// pcre to keep it from doing bad things like blowing the stack or taking
// an eternity to return a result. A value of 5000 is good enough to stop
// stack blowup in a 2MB thread stack. Setting match_limit to zero will
// disable match limiting. Alternately, you can set match_limit_recursion()
// which uses PCRE_EXTRA_MATCH_LIMIT_RECURSION to limit how much pcre
// recurses. match_limit() caps the number of matches pcre does;
// match_limit_recrusion() caps the depth of recursion.
//
// Normally, to pass one or more modifiers to a RE class, you declare
// a RE_Options object, set the appropriate options, and pass this
// object to a RE constructor. Example:
//
// RE_options opt;
// opt.set_caseless(true);
//
// if (RE("HELLO", opt).PartialMatch("hello world")) ...
//
// RE_options has two constructors. The default constructor takes no
// arguments and creates a set of flags that are off by default.
//
// The optional parameter 'option_flags' is to facilitate transfer
// of legacy code from C programs. This lets you do
// RE(pattern, RE_Options(PCRE_CASELESS|PCRE_MULTILINE)).PartialMatch(str);
//
// But new code is better off doing
// RE(pattern,
// RE_Options().set_caseless(true).set_multiline(true)).PartialMatch(str);
// (See below)
//
// If you are going to pass one of the most used modifiers, there are some
// convenience functions that return a RE_Options class with the
// appropriate modifier already set:
// CASELESS(), UTF8(), MULTILINE(), DOTALL(), EXTENDED()
//
// If you need to set several options at once, and you don't want to go
// through the pains of declaring a RE_Options object and setting several
// options, there is a parallel method that give you such ability on the
// fly. You can concatenate several set_xxxxx member functions, since each
// of them returns a reference to its class object. e.g.: to pass
// PCRE_CASELESS, PCRE_EXTENDED, and PCRE_MULTILINE to a RE with one
// statement, you may write
//
// RE(" ^ xyz \\s+ .* blah$", RE_Options()
// .set_caseless(true)
// .set_extended(true)
// .set_multiline(true)).PartialMatch(sometext);
//
// -----------------------------------------------------------------------
// SCANNING TEXT INCREMENTALLY
//
// The "Consume" operation may be useful if you want to repeatedly
// match regular expressions at the front of a string and skip over
// them as they match. This requires use of the "StringPiece" type,
// which represents a sub-range of a real string. Like RE, StringPiece
// is defined in the pcrecpp namespace.
//
// Example: read lines of the form "var = value" from a string.
// string contents = ...; // Fill string somehow
// pcrecpp::StringPiece input(contents); // Wrap in a StringPiece
//
// string var;
// int value;
// pcrecpp::RE re("(\\w+) = (\\d+)\n");
// while (re.Consume(&input, &var, &value)) {
// ...;
// }
//
// Each successful call to "Consume" will set "var/value", and also
// advance "input" so it points past the matched text.
//
// The "FindAndConsume" operation is similar to "Consume" but does not
// anchor your match at the beginning of the string. For example, you
// could extract all words from a string by repeatedly calling
// pcrecpp::RE("(\\w+)").FindAndConsume(&input, &word)
//
// -----------------------------------------------------------------------
// PARSING HEX/OCTAL/C-RADIX NUMBERS
//
// By default, if you pass a pointer to a numeric value, the
// corresponding text is interpreted as a base-10 number. You can
// instead wrap the pointer with a call to one of the operators Hex(),
// Octal(), or CRadix() to interpret the text in another base. The
// CRadix operator interprets C-style "0" (base-8) and "0x" (base-16)
// prefixes, but defaults to base-10.
//
// Example:
// int a, b, c, d;
// pcrecpp::RE re("(.*) (.*) (.*) (.*)");
// re.FullMatch("100 40 0100 0x40",
// pcrecpp::Octal(&a), pcrecpp::Hex(&b),
// pcrecpp::CRadix(&c), pcrecpp::CRadix(&d));
// will leave 64 in a, b, c, and d.
//
// -----------------------------------------------------------------------
// REPLACING PARTS OF STRINGS
//
// You can replace the first match of "pattern" in "str" with
// "rewrite". Within "rewrite", backslash-escaped digits (\1 to \9)
// can be used to insert text matching corresponding parenthesized
// group from the pattern. \0 in "rewrite" refers to the entire
// matching text. E.g.,
//
// string s = "yabba dabba doo";
// pcrecpp::RE("b+").Replace("d", &s);
//
// will leave "s" containing "yada dabba doo". The result is true if
// the pattern matches and a replacement occurs, or false otherwise.
//
// GlobalReplace() is like Replace(), except that it replaces all
// occurrences of the pattern in the string with the rewrite.
// Replacements are not subject to re-matching. E.g.,
//
// string s = "yabba dabba doo";
// pcrecpp::RE("b+").GlobalReplace("d", &s);
//
// will leave "s" containing "yada dada doo". It returns the number
// of replacements made.
//
// Extract() is like Replace(), except that if the pattern matches,
// "rewrite" is copied into "out" (an additional argument) with
// substitutions. The non-matching portions of "text" are ignored.
// Returns true iff a match occurred and the extraction happened
// successfully. If no match occurs, the string is left unaffected.
#include <string>
#include <pcre.h>
#include <pcrecpparg.h> // defines the Arg class
// This isn't technically needed here, but we include it
// anyway so folks who include pcrecpp.h don't have to.
#include <pcre_stringpiece.h>
namespace pcrecpp {
#define PCRE_SET_OR_CLEAR(b, o) \
if (b) all_options_ |= (o); else all_options_ &= ~(o); \
return *this
#define PCRE_IS_SET(o) \
(all_options_ & o) == o
/***** Compiling regular expressions: the RE class *****/
// RE_Options allow you to set options to be passed along to pcre,
// along with other options we put on top of pcre.
// Only 9 modifiers, plus match_limit and match_limit_recursion,
// are supported now.
class PCRECPP_EXP_DEFN RE_Options {
public:
// constructor
RE_Options() : match_limit_(0), match_limit_recursion_(0), all_options_(0) {}
// alternative constructor.
// To facilitate transfer of legacy code from C programs
//
// This lets you do
// RE(pattern, RE_Options(PCRE_CASELESS|PCRE_MULTILINE)).PartialMatch(str);
// But new code is better off doing
// RE(pattern,
// RE_Options().set_caseless(true).set_multiline(true)).PartialMatch(str);
RE_Options(int option_flags) : match_limit_(0), match_limit_recursion_(0),
all_options_(option_flags) {}
// we're fine with the default destructor, copy constructor, etc.
// accessors and mutators
int match_limit() const { return match_limit_; };
RE_Options &set_match_limit(int limit) {
match_limit_ = limit;
return *this;
}
int match_limit_recursion() const { return match_limit_recursion_; };
RE_Options &set_match_limit_recursion(int limit) {
match_limit_recursion_ = limit;
return *this;
}
bool caseless() const {
return PCRE_IS_SET(PCRE_CASELESS);
}
RE_Options &set_caseless(bool x) {
PCRE_SET_OR_CLEAR(x, PCRE_CASELESS);
}
bool multiline() const {
return PCRE_IS_SET(PCRE_MULTILINE);
}
RE_Options &set_multiline(bool x) {
PCRE_SET_OR_CLEAR(x, PCRE_MULTILINE);
}
bool dotall() const {
return PCRE_IS_SET(PCRE_DOTALL);
}
RE_Options &set_dotall(bool x) {
PCRE_SET_OR_CLEAR(x, PCRE_DOTALL);
}
bool extended() const {
return PCRE_IS_SET(PCRE_EXTENDED);
}
RE_Options &set_extended(bool x) {
PCRE_SET_OR_CLEAR(x, PCRE_EXTENDED);
}
bool dollar_endonly() const {
return PCRE_IS_SET(PCRE_DOLLAR_ENDONLY);
}
RE_Options &set_dollar_endonly(bool x) {
PCRE_SET_OR_CLEAR(x, PCRE_DOLLAR_ENDONLY);
}
bool extra() const {
return PCRE_IS_SET(PCRE_EXTRA);
}
RE_Options &set_extra(bool x) {
PCRE_SET_OR_CLEAR(x, PCRE_EXTRA);
}
bool ungreedy() const {
return PCRE_IS_SET(PCRE_UNGREEDY);
}
RE_Options &set_ungreedy(bool x) {
PCRE_SET_OR_CLEAR(x, PCRE_UNGREEDY);
}
bool utf8() const {
return PCRE_IS_SET(PCRE_UTF8);
}
RE_Options &set_utf8(bool x) {
PCRE_SET_OR_CLEAR(x, PCRE_UTF8);
}
bool no_auto_capture() const {
return PCRE_IS_SET(PCRE_NO_AUTO_CAPTURE);
}
RE_Options &set_no_auto_capture(bool x) {
PCRE_SET_OR_CLEAR(x, PCRE_NO_AUTO_CAPTURE);
}
RE_Options &set_all_options(int opt) {
all_options_ = opt;
return *this;
}
int all_options() const {
return all_options_ ;
}
// TODO: add other pcre flags
private:
int match_limit_;
int match_limit_recursion_;
int all_options_;
};
// These functions return some common RE_Options
static inline RE_Options UTF8() {
return RE_Options().set_utf8(true);
}
static inline RE_Options CASELESS() {
return RE_Options().set_caseless(true);
}
static inline RE_Options MULTILINE() {
return RE_Options().set_multiline(true);
}
static inline RE_Options DOTALL() {
return RE_Options().set_dotall(true);
}
static inline RE_Options EXTENDED() {
return RE_Options().set_extended(true);
}
// Interface for regular expression matching. Also corresponds to a
// pre-compiled regular expression. An "RE" object is safe for
// concurrent use by multiple threads.
class PCRECPP_EXP_DEFN RE {
public:
// We provide implicit conversions from strings so that users can
// pass in a string or a "const char*" wherever an "RE" is expected.
RE(const string& pat) { Init(pat, NULL); }
RE(const string& pat, const RE_Options& option) { Init(pat, &option); }
RE(const char* pat) { Init(pat, NULL); }
RE(const char* pat, const RE_Options& option) { Init(pat, &option); }
RE(const unsigned char* pat) {
Init(reinterpret_cast<const char*>(pat), NULL);
}
RE(const unsigned char* pat, const RE_Options& option) {
Init(reinterpret_cast<const char*>(pat), &option);
}
// Copy constructor & assignment - note that these are expensive
// because they recompile the expression.
RE(const RE& re) { Init(re.pattern_, &re.options_); }
const RE& operator=(const RE& re) {
if (this != &re) {
Cleanup();
// This is the code that originally came from Google
// Init(re.pattern_.c_str(), &re.options_);
// This is the replacement from Ari Pollak
Init(re.pattern_, &re.options_);
}
return *this;
}
~RE();
// The string specification for this RE. E.g.
// RE re("ab*c?d+");
// re.pattern(); // "ab*c?d+"
const string& pattern() const { return pattern_; }
// If RE could not be created properly, returns an error string.
// Else returns the empty string.
const string& error() const { return *error_; }
/***** The useful part: the matching interface *****/
// This is provided so one can do pattern.ReplaceAll() just as
// easily as ReplaceAll(pattern-text, ....)
bool FullMatch(const StringPiece& text,
const Arg& ptr1 = no_arg,
const Arg& ptr2 = no_arg,
const Arg& ptr3 = no_arg,
const Arg& ptr4 = no_arg,
const Arg& ptr5 = no_arg,
const Arg& ptr6 = no_arg,
const Arg& ptr7 = no_arg,
const Arg& ptr8 = no_arg,
const Arg& ptr9 = no_arg,
const Arg& ptr10 = no_arg,
const Arg& ptr11 = no_arg,
const Arg& ptr12 = no_arg,
const Arg& ptr13 = no_arg,
const Arg& ptr14 = no_arg,
const Arg& ptr15 = no_arg,
const Arg& ptr16 = no_arg) const;
bool PartialMatch(const StringPiece& text,
const Arg& ptr1 = no_arg,
const Arg& ptr2 = no_arg,
const Arg& ptr3 = no_arg,
const Arg& ptr4 = no_arg,
const Arg& ptr5 = no_arg,
const Arg& ptr6 = no_arg,
const Arg& ptr7 = no_arg,
const Arg& ptr8 = no_arg,
const Arg& ptr9 = no_arg,
const Arg& ptr10 = no_arg,
const Arg& ptr11 = no_arg,
const Arg& ptr12 = no_arg,
const Arg& ptr13 = no_arg,
const Arg& ptr14 = no_arg,
const Arg& ptr15 = no_arg,
const Arg& ptr16 = no_arg) const;
bool Consume(StringPiece* input,
const Arg& ptr1 = no_arg,
const Arg& ptr2 = no_arg,
const Arg& ptr3 = no_arg,
const Arg& ptr4 = no_arg,
const Arg& ptr5 = no_arg,
const Arg& ptr6 = no_arg,
const Arg& ptr7 = no_arg,
const Arg& ptr8 = no_arg,
const Arg& ptr9 = no_arg,
const Arg& ptr10 = no_arg,
const Arg& ptr11 = no_arg,
const Arg& ptr12 = no_arg,
const Arg& ptr13 = no_arg,
const Arg& ptr14 = no_arg,
const Arg& ptr15 = no_arg,
const Arg& ptr16 = no_arg) const;
bool FindAndConsume(StringPiece* input,
const Arg& ptr1 = no_arg,
const Arg& ptr2 = no_arg,
const Arg& ptr3 = no_arg,
const Arg& ptr4 = no_arg,
const Arg& ptr5 = no_arg,
const Arg& ptr6 = no_arg,
const Arg& ptr7 = no_arg,
const Arg& ptr8 = no_arg,
const Arg& ptr9 = no_arg,
const Arg& ptr10 = no_arg,
const Arg& ptr11 = no_arg,
const Arg& ptr12 = no_arg,
const Arg& ptr13 = no_arg,
const Arg& ptr14 = no_arg,
const Arg& ptr15 = no_arg,
const Arg& ptr16 = no_arg) const;
bool Replace(const StringPiece& rewrite,
string *str) const;
int GlobalReplace(const StringPiece& rewrite,
string *str) const;
bool Extract(const StringPiece &rewrite,
const StringPiece &text,
string *out) const;
// Escapes all potentially meaningful regexp characters in
// 'unquoted'. The returned string, used as a regular expression,
// will exactly match the original string. For example,
// 1.5-2.0?
// may become:
// 1\.5\-2\.0\?
// Note QuoteMeta behaves the same as perl's QuoteMeta function,
// *except* that it escapes the NUL character (\0) as backslash + 0,
// rather than backslash + NUL.
static string QuoteMeta(const StringPiece& unquoted);
/***** Generic matching interface *****/
// Type of match (TODO: Should be restructured as part of RE_Options)
enum Anchor {
UNANCHORED, // No anchoring
ANCHOR_START, // Anchor at start only
ANCHOR_BOTH // Anchor at start and end
};
// General matching routine. Stores the length of the match in
// "*consumed" if successful.
bool DoMatch(const StringPiece& text,
Anchor anchor,
int* consumed,
const Arg* const* args, int n) const;
// Return the number of capturing subpatterns, or -1 if the
// regexp wasn't valid on construction.
int NumberOfCapturingGroups() const;
// The default value for an argument, to indicate the end of the argument
// list. This must be used only in optional argument defaults. It should NOT
// be passed explicitly. Some people have tried to use it like this:
//
// FullMatch(x, y, &z, no_arg, &w);
//
// This is a mistake, and will not work.
static Arg no_arg;
private:
void Init(const string& pattern, const RE_Options* options);
void Cleanup();
// Match against "text", filling in "vec" (up to "vecsize" * 2/3) with
// pairs of integers for the beginning and end positions of matched
// text. The first pair corresponds to the entire matched text;
// subsequent pairs correspond, in order, to parentheses-captured
// matches. Returns the number of pairs (one more than the number of
// the last subpattern with a match) if matching was successful
// and zero if the match failed.
// I.e. for RE("(foo)|(bar)|(baz)") it will return 2, 3, and 4 when matching
// against "foo", "bar", and "baz" respectively.
// When matching RE("(foo)|hello") against "hello", it will return 1.
// But the values for all subpattern are filled in into "vec".
int TryMatch(const StringPiece& text,
int startpos,
Anchor anchor,
bool empty_ok,
int *vec,
int vecsize) const;
// Append the "rewrite" string, with backslash subsitutions from "text"
// and "vec", to string "out".
bool Rewrite(string *out,
const StringPiece& rewrite,
const StringPiece& text,
int *vec,
int veclen) const;
// internal implementation for DoMatch
bool DoMatchImpl(const StringPiece& text,
Anchor anchor,
int* consumed,
const Arg* const args[],
int n,
int* vec,
int vecsize) const;
// Compile the regexp for the specified anchoring mode
pcre* Compile(Anchor anchor);
string pattern_;
RE_Options options_;
pcre* re_full_; // For full matches
pcre* re_partial_; // For partial matches
const string* error_; // Error indicator (or points to empty string)
};
} // namespace pcrecpp
#endif /* _PCRECPP_H */
SILENT KILLER Tool