{"id":1648,"date":"2024-11-04T17:08:17","date_gmt":"2024-11-04T09:08:17","guid":{"rendered":"https:\/\/www.madbull.site\/?p=1648"},"modified":"2024-11-05T16:23:27","modified_gmt":"2024-11-05T08:23:27","slug":"c%e8%af%ad%e8%a8%80%e4%b8%ad%e7%9a%84%e6%ad%a3%e5%88%99%e8%a1%a8%e8%be%be%e5%bc%8f%e5%8c%b9%e9%85%8d","status":"publish","type":"post","link":"https:\/\/www.madbull.site\/?p=1648","title":{"rendered":"C\u8bed\u8a00\u4e2d\u7684\u6b63\u5219\u8868\u8fbe\u5f0f\u5339\u914d"},"content":{"rendered":"\n<p>\u6b63\u5219\u5339\u914d\u5206\u4e3a\u4e24\u6b65\uff1a\u7b2c\u4e00\u6b65\uff0c\u7f16\u8bd1\u5339\u914d\u6a21\u5f0f\uff1b\u7b2c\u4e8c\u6b65\uff0c\u5bf9\u76ee\u7684\u5b57\u7b26\u4e32\u8fdb\u884c\u5339\u914d\u3002<\/p>\n\n\n\n<div style=\"margin-top:var(--wp--preset--spacing--20);margin-bottom:var(--wp--preset--spacing--20);height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"has-large-font-size\"><strong>\u7f16\u8bd1\u6a21\u5f0f\u51fd\u6570\u539f\u578b\uff1a<\/strong><\/p>\n\n\n\n<div style=\"margin-top:var(--wp--preset--spacing--20);margin-bottom:var(--wp--preset--spacing--20);height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<pre class=\"wp-block-code\"><code>pcre *pcre_compile(const char *pattern, int options,\n     const char **errptr, int *erroffset,\n     const unsigned char *tableptr);<\/code><\/pre>\n\n\n\n<div style=\"margin-top:var(--wp--preset--spacing--20);margin-bottom:var(--wp--preset--spacing--20);height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p><code><strong>pattern<\/strong><\/code>\uff1a\u8981\u7f16\u8bd1\u7684\u6b63\u5219\u8868\u8fbe\u5f0f<\/p>\n\n\n\n<div style=\"margin-top:var(--wp--preset--spacing--20);margin-bottom:var(--wp--preset--spacing--20);height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p><code><strong>options<\/strong><\/code>\uff1a\u7f16\u8bd1\u63a7\u5236\u9009\u9879\uff0c\u5e38\u7528\u503c\u6709\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>PCRE_ANCHORED<\/code>\uff1a\u6a21\u5f0f\u5fc5\u987b\u4ece\u5b57\u7b26\u4e32\u7684\u5f00\u5934\u5f00\u59cb\u5339\u914d\u3002<\/li>\n\n\n\n<li><code>PCRE_CASELESS<\/code>\uff1a\u6a21\u5f0f\u5339\u914d\u65f6\u4e0d\u533a\u5206\u5927\u5c0f\u5199\u3002<\/li>\n\n\n\n<li><code>PCRE_DOLLAR_ENDONLY<\/code>\uff1a<code>$<\/code> \u53ea\u5339\u914d\u5b57\u7b26\u4e32\u7684\u7ed3\u5c3e\uff0c\u800c\u4e0d\u662f\u884c\u7ed3\u5c3e\u3002<\/li>\n\n\n\n<li><code>PCRE_DOTALL<\/code>\uff1a<code>.<\/code> \u5339\u914d\u6240\u6709\u5b57\u7b26\uff0c\u5305\u62ec\u6362\u884c\u7b26\u3002<\/li>\n\n\n\n<li><code>PCRE_EXTENDED<\/code>\uff1a\u5ffd\u7565\u6a21\u5f0f\u4e2d\u7684\u7a7a\u767d\u5b57\u7b26\u548c\u6ce8\u91ca\u3002<\/li>\n\n\n\n<li><code>PCRE_MULTILINE<\/code>\uff1a<code>^<\/code> \u548c <code>$<\/code> \u5339\u914d\u6bcf\u4e00\u884c\u7684\u5f00\u5934\u548c\u7ed3\u5c3e\uff0c\u800c\u4e0d\u4ec5\u4ec5\u662f\u6574\u4e2a\u5b57\u7b26\u4e32\u7684\u5f00\u5934\u548c\u7ed3\u5c3e\u3002<\/li>\n\n\n\n<li><code>PCRE_NO_AUTO_CAPTURE<\/code>\uff1a\u7981\u7528\u81ea\u52a8\u6355\u83b7\uff0c\u53ea\u6709\u663e\u5f0f\u547d\u540d\u7684\u5b50\u6a21\u5f0f\u624d\u4f1a\u88ab\u6355\u83b7\u3002<\/li>\n\n\n\n<li><code>PCRE_UNGREEDY<\/code>\uff1a\u53cd\u8f6c\u91cf\u8bcd\u7684\u8d2a\u5a6a\u6027\uff0c\u9ed8\u8ba4\u60c5\u51b5\u4e0b\u91cf\u8bcd\u662f\u8d2a\u5a6a\u7684\u3002<\/li>\n\n\n\n<li><code>PCRE_UTF8<\/code>\uff1a\u6a21\u5f0f\u548c\u76ee\u6807\u5b57\u7b26\u4e32\u88ab\u8ba4\u4e3a\u662f UTF-8 \u7f16\u7801\u7684\u3002<\/li>\n<\/ul>\n\n\n\n<div style=\"margin-top:var(--wp--preset--spacing--20);margin-bottom:var(--wp--preset--spacing--20);height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p><code><strong>errptr<\/strong><\/code> \u548c <code><strong>erroffset<\/strong><\/code>\uff1a\u9519\u8bef\u4fe1\u606f\u5185\u5bb9\u548c\u9519\u8bef\u4fe1\u606f\u4ee3\u7801<\/p>\n\n\n\n<div style=\"margin-top:var(--wp--preset--spacing--20);margin-bottom:var(--wp--preset--spacing--20);height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p><code><strong>tableptr<\/strong><\/code>\uff1a\u6307\u5411\u5b57\u7b26\u8868\u7684\u6307\u9488\u3002\u8fd9\u4e9b\u5b57\u7b26\u8868\u7528\u4e8e\u5b57\u7b26\u5206\u7c7b\u548c\u5927\u5c0f\u5199\u8f6c\u6362\u7b49\u64cd\u4f5c\u3002\u5982\u679c\u4e3a <code>NULL<\/code>\uff0c\u5219\u4f7f\u7528\u9ed8\u8ba4\u7684\u5b57\u7b26\u8868\u3002<\/p>\n\n\n\n<div style=\"margin-top:var(--wp--preset--spacing--20);margin-bottom:var(--wp--preset--spacing--20);height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"has-large-font-size\"><strong>\u5339\u914d\u51fd\u6570\u539f\u578b\uff1a<\/strong><\/p>\n\n\n\n<div style=\"margin-top:var(--wp--preset--spacing--20);margin-bottom:var(--wp--preset--spacing--20);height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<pre class=\"wp-block-code\"><code>int pcre_exec(const pcre *code, const pcre_extra *extra,\n     const char *subject, int length, int startoffset,\n     int options, int *ovector, int ovecsize);<\/code><\/pre>\n\n\n\n<div style=\"margin-top:var(--wp--preset--spacing--20);margin-bottom:var(--wp--preset--spacing--20);height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p><strong><code>code<\/code><\/strong>\uff1a\u7f16\u8bd1\u540e\u7684\u6b63\u5219\u5339\u914d\u6a21\u5f0f<\/p>\n\n\n\n<div style=\"margin-top:var(--wp--preset--spacing--20);margin-bottom:var(--wp--preset--spacing--20);height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p><code><strong>extra<\/strong><\/code>\uff1a\u6307\u5411\u989d\u5916\u4fe1\u606f\u7684\u6307\u9488\u3002\u901a\u5e38\u7528\u4e8e\u4f20\u9012 JIT \u7f16\u8bd1\u4fe1\u606f\u6216\u5176\u4ed6\u8f85\u52a9\u6570\u636e\u3002\u5982\u679c\u4e0d\u9700\u8981\u989d\u5916\u4fe1\u606f\uff0c\u53ef\u4ee5\u4f20\u9012 <code>NULL<\/code>\u3002<\/p>\n\n\n\n<div style=\"margin-top:var(--wp--preset--spacing--20);margin-bottom:var(--wp--preset--spacing--20);height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p><code><strong>subject<\/strong><\/code>\uff1a\u88ab\u68c0\u6d4b\u7684\u5b57\u7b26\u4e32\uff0c\u5fc5\u987b\u4ee5&#8217;\\0&#8217;\u7ed3\u5c3e<\/p>\n\n\n\n<div style=\"margin-top:var(--wp--preset--spacing--20);margin-bottom:var(--wp--preset--spacing--20);height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p><code><strong>length<\/strong><\/code>\uff1a\u88ab\u68c0\u6d4b\u5b57\u7b26\u4e32\u957f\u5ea6<\/p>\n\n\n\n<div style=\"margin-top:var(--wp--preset--spacing--20);margin-bottom:var(--wp--preset--spacing--20);height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p><strong><code>startoffset<\/code><\/strong>\uff1a\u4ece\u88ab\u68c0\u6d4b\u5b57\u7b26\u4e32\u7684\u67d0\u4e2a\u4f4d\u7f6e\u5f00\u59cb\u5339\u914d<\/p>\n\n\n\n<div style=\"margin-top:var(--wp--preset--spacing--20);margin-bottom:var(--wp--preset--spacing--20);height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p><strong><code>options<\/code><\/strong>\uff1a\u5339\u914d\u9009\u9879\uff0c\u5e38\u7528\u7684\u6709\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>PCRE_ANCHORED<\/code>\uff1a\u6a21\u5f0f\u5fc5\u987b\u4ece <code>startoffset<\/code> \u6307\u5b9a\u7684\u4f4d\u7f6e\u5f00\u59cb\u5339\u914d\u3002<\/li>\n\n\n\n<li><code>PCRE_NOTBOL<\/code>\uff1a\u76ee\u6807\u5b57\u7b26\u4e32\u7684\u5f00\u5934\u4e0d\u88ab\u89c6\u4e3a\u884c\u7684\u5f00\u5934\u3002<\/li>\n\n\n\n<li><code>PCRE_NOTEOL<\/code>\uff1a\u76ee\u6807\u5b57\u7b26\u4e32\u7684\u7ed3\u5c3e\u4e0d\u88ab\u89c6\u4e3a\u884c\u7684\u7ed3\u5c3e\u3002<\/li>\n\n\n\n<li><code>PCRE_NOTEMPTY<\/code>\uff1a\u4e0d\u5141\u8bb8\u7a7a\u5339\u914d\u3002<\/li>\n\n\n\n<li><code>PCRE_NO_UTF8_CHECK<\/code>\uff1a\u5982\u679c\u8bbe\u7f6e\u4e86 <code>PCRE_UTF8<\/code> \u9009\u9879\uff0c\u4f46\u4e0d\u5e0c\u671b\u5728\u6bcf\u6b21\u5339\u914d\u65f6\u90fd\u68c0\u67e5 UTF-8 \u6709\u6548\u6027\uff0c\u53ef\u4ee5\u4f7f\u7528\u6b64\u9009\u9879\u3002<\/li>\n<\/ul>\n\n\n\n<div style=\"margin-top:var(--wp--preset--spacing--20);margin-bottom:var(--wp--preset--spacing--20);height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p><strong><code>ovector<\/code><\/strong> \u548c <strong><code>ovecsize<\/code><\/strong>\uff1a\u7528\u4e8e\u5b58\u50a8\u5339\u914d\u7ed3\u679c\u548c\u5b58\u50a8\u7ed3\u679c\u7a7a\u95f4\u7684\u5927\u5c0f\u3002<\/p>\n\n\n\n<div style=\"margin-top:var(--wp--preset--spacing--20);margin-bottom:var(--wp--preset--spacing--20);height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"has-large-font-size\"><strong>\u6d4b\u8bd5\u4ee3\u7801tpcre.c<\/strong><\/p>\n\n\n\n<div style=\"margin-top:var(--wp--preset--spacing--20);margin-bottom:var(--wp--preset--spacing--20);height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ gcc -Wall -o test tpcre.c -lpcre\n\n#include &lt;stdio.h&gt;\n#include &lt;stdlib.h&gt;\n#include &lt;string.h&gt;\n#include &lt;pcre.h&gt;\n\n\nint main(int argc, char *argv&#91;]) {\n    char pcre_rule&#91;] = \"(cd)(.*)hij\" ;\n    int options = PCRE_CASELESS | PCRE_DOTALL ; \/\/ | PCRE_ANCHORED ; \/\/  | PCRE_NO_AUTO_CAPTURE ;\n    const char * err ;\n    int errptr ;\n\n    \/\/ \u7f16\u8bd1\n    pcre * pcre_cmpld = pcre_compile(pcre_rule, options, &amp;err, &amp;errptr, NULL);\n\n    char mstr&#91;] = \"abcDEfGHIjklmn\" ;\n\n    int ovector&#91;20] ;\n    memset(ovector, 0x00, sizeof(ovector));\n\n    int rslt = pcre_exec(pcre_cmpld, NULL, mstr, strlen(mstr), 0, 0, ovector, 20);\n    printf(\"match sub &#91;%d]\\n\", rslt ) ;\n    if(rslt &lt; 0 ) {\n        \n    } else {\n        int start = 0 ; \n        int end = 0 ;\n        char strrslt&#91;1024] ;\n        for(int i=0 ; i &lt; rslt ; ++i ) {\n            start = ovector&#91;2*i] ;\n            end = ovector&#91;2*i+1] ;\n            memset(strrslt, 0x00, sizeof(strrslt)) ;\n            memcpy(strrslt, mstr+start, end-start) ;\n            printf(\"match start&#91;%d] end&#91;%d]: &#91;%s]\\n\", start, end, strrslt) ;\n        }\n    }\n    return 0 ;\n}\n<\/code><\/pre>\n\n\n\n<div style=\"margin-top:var(--wp--preset--spacing--20);margin-bottom:var(--wp--preset--spacing--20);height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"has-large-font-size\"><strong>\u7f16\u8bd1\u548c\u6d4b\u8bd5<\/strong><\/p>\n\n\n\n<div style=\"margin-top:var(--wp--preset--spacing--20);margin-bottom:var(--wp--preset--spacing--20);height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"390\" height=\"144\" src=\"https:\/\/www.madbull.site\/wp-content\/uploads\/2024\/11\/\u56fe\u7247-1.png\" alt=\"\" class=\"wp-image-1649\" srcset=\"https:\/\/www.madbull.site\/wp-content\/uploads\/2024\/11\/\u56fe\u7247-1.png 390w, https:\/\/www.madbull.site\/wp-content\/uploads\/2024\/11\/\u56fe\u7247-1-300x111.png 300w\" sizes=\"auto, (max-width: 390px) 100vw, 390px\" \/><\/figure>\n\n\n\n<div style=\"margin-top:var(--wp--preset--spacing--50);margin-bottom:var(--wp--preset--spacing--50);height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-wide\"\/>\n\n\n\n<div style=\"margin-top:var(--wp--preset--spacing--20);margin-bottom:var(--wp--preset--spacing--20);height:0px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>\u5339\u914d\u52a0\u901f\uff0c\u53c2\u770b\u6587\u7ae0\uff1a<a href=\"https:\/\/www.madbull.site\/?p=1655\">https:\/\/www.madbull.site\/?p=1655<\/a> JIT\u52a0\u901f\u6b63\u5219\u5339\u914d<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u6b63\u5219\u5339\u914d\u5206\u4e3a\u4e24\u6b65\uff1a\u7b2c\u4e00\u6b65\uff0c\u7f16\u8bd1\u5339\u914d\u6a21\u5f0f\uff1b\u7b2c\u4e8c\u6b65\uff0c\u5bf9\u76ee\u7684\u5b57\u7b26\u4e32\u8fdb\u884c\u5339\u914d\u3002<br \/>\n\u7f16\u8bd1\u6a21\u5f0f\u51fd\u6570\u539f\u578b\uff1a<br \/>\n\u5339\u914d\u51fd\u6570\u539f\u578b\uff1a<br \/>\n\u6d4b\u8bd5\u4ee3\u7801tpcre.c<br \/>\n\u7f16\u8bd1\u548c\u6d4b\u8bd5<\/p>\n","protected":false},"author":1,"featured_media":559,"comment_status":"open","ping_status":"open","sticky":false,"template":"single-with-sidebar","format":"standard","meta":{"footnotes":""},"categories":[156,154],"tags":[530,531,457,225,256],"class_list":["post-1648","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-c-c","category-154","tag-pcre","tag-531","tag-457","tag-225","tag-256"],"_links":{"self":[{"href":"https:\/\/www.madbull.site\/index.php?rest_route=\/wp\/v2\/posts\/1648","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.madbull.site\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.madbull.site\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.madbull.site\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.madbull.site\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1648"}],"version-history":[{"count":6,"href":"https:\/\/www.madbull.site\/index.php?rest_route=\/wp\/v2\/posts\/1648\/revisions"}],"predecessor-version":[{"id":1660,"href":"https:\/\/www.madbull.site\/index.php?rest_route=\/wp\/v2\/posts\/1648\/revisions\/1660"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.madbull.site\/index.php?rest_route=\/wp\/v2\/media\/559"}],"wp:attachment":[{"href":"https:\/\/www.madbull.site\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1648"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.madbull.site\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1648"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.madbull.site\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1648"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}