C语言 PCRE正则表达式 函数解析

求指教:PCRE库函数中,pcre_exec()的返回值是什么意思? *ovector数组的元素又是代表什么意

2个回答

int pcre_exec(const pcre *code, const pcre_extra *extra, const char *subject, int length, int startoffset, int options, int *ovector, int ovecsize)
pcre_exec()返回匹配串的偏移位置

 #include <string.h>
#include <stdio.h>
#include <pcre.h>

int main()
{
    pcre *re;

    const char *error;
    int errorOffset, i = 0;
    /**
     * pcre_exec匹配的结果
     * ovector的结构为
     * {匹配结果1的起始位置,匹配结果1的结束位置,匹配结果2的起始位置,...匹配结果N的结束位置}
     */
    int oveccount = 2, ovector[oveccount];

    /**
     * rc是pcre_exec匹配到的结果数量
     */
    int rc;
    /**
     * pcre_exec执行的偏移量
     * 从匹配到的结果的结束位置开始下一次匹配
     */
    int exec_offset = 0;


    const char *captured_string;
    char *subject = "1t2t3t4t5t6t7t8t9t0tatbtct黄t避孕t";
    char *pattern = "[^t]+t";

    re = pcre_compile( pattern, PCRE_CASELESS, &error, &errorOffset, NULL );

    if ( re == NULL ) {
        printf("compilation failed at offset%d: %s\n", errorOffset, error);
        return 0;
    }

    do {
        // exec_offset偏移量 默认从1开始,然后循环的时候从匹配到的结果开始
        rc = pcre_exec( re, NULL, subject, strlen(subject), exec_offset, 0, ovector, oveccount );

        if ( rc > 0 ) {
            // 获取到匹配的结果
            pcre_get_substring( subject, ovector, rc, 0, &captured_string );
            printf("captured string : %s\n", captured_string);

            // 设置偏移量
            exec_offset = ovector[1];
            i++;
        }
    } while ( rc > 0 );

    printf("match %d\n", i);

    return 0;
}
peinishangrichu
libk405 ovector={5,16,5,16,-1....};
3 年多之前 回复
peinishangrichu
libk405 code=pcre_compile(pattern,0,&error,&erroffset,NULL); rc=pcre_exec(code,NULL,subject,strlen(subject),0,0,ovector,N);
3 年多之前 回复

#define PCRE_STATIC // 静态库编译选项

#include <stdio.h>

#include <string.h>

#include <pcre.h>

#define OVECCOUNT 30 /* should be a multiple of 3 */

#define EBUFLEN 128......
答案就在这里:PCRE-C语言正则表达式
----------------------Hi,地球人,我是问答机器人小S,上面的内容就是我狂拽酷炫叼炸天的答案,除了赞同,你还有别的选择吗?

peinishangrichu
libk405 for (i = 0; i < rc; i++) { //分别取出捕获分组 $0整个正则公式 $1第一个() char *substring_start = src + ovector[2*i]; int substring_length = ovector[2*i+1] - ovector[2*i]; printf("$%2d: %.*s\n", i, substring_length, substring_start);
3 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
c语言正则表达式pcre
pcre;pcre.h;regex.h;pcre.lib;pcre3.dll,c语言正则表达式
PCRE兼容正则表达式函数
1.preg_grep()函数 array preg_grep(string pattern,array input) 函数功能:用input中的元素一一匹配表达式pattern,最后返回所有相匹配的元素所组成的数组 $preg = '/\d{3,4}-?\d{7,8}/'; $arr = array('043212345678','0431-7654321','12345678');
c语言正则表达式库pcre使用例子
#include #include #include #include #include #include #include #include #define OVECCOUNT 30 /* should be a multiple of 3 */ #define EBUFLEN 128 #define BUFLEN 1024 int main_adfs() { pc
PHP中的正则表达式及PCRE函数
PCRE PHP有两种使用不同的方式来使用正则表达式:PCRE(Perl兼容表示法,preg_*)函数 和 POSIX(POSIX 扩展表示法,ereg_*) 函数。幸运的是,POSIX 家族函数从 PHP 5.3.0 开始就被弃用了。 正则表达式 界定符 经常使用的分隔符是正斜线(/)、hash符号(#) 以及取反符号(~)。下面的例子都是使用合法分隔符的模式 /foo b
PHP学习笔记--正则表达式及PCRE兼容正则表达式函数
正则表达式手册。点击查看 正则表达式在线测试工具:http://tool.oschina.net/regex/
PHP正则表达式 PCRE兼容正则表达式函数
函数名称:preg_grep() 函数语法:array preg_grep(string pattern,array input) 函数功能:使用数据input中的元素一一匹配表达式pattern,最后返回由所有匹配的元素所组成的数组。 函数名称:preg_match()和preg_math_all 函数语法:int preg_match/preg_match_all(string
正则表达式pcre
正则表达式pcre
PCRE 【Perl兼容正则表达式解析库】
Perl兼容正则表达式解析库,本资源包是作者制作的静态库,版本为7.8。使用VC6在WinXp下编译通过。使用时请将pcre.h放到VC的include目录下。
PCRE 正则表达式 DLL 工程
PCRE 正则表达式 DLL 完整工程 可以使用
正则表达式pcre在Android下的移植
http://www.cnblogs.com/hibraincol/archive/2011/10/15/2213714.html 因为项目需要在android的NDK开发中使用pcre正则表达式库,而android系统中并没有自带该库,所以就得另外移植了, 下面是移植的详细步骤:   1. 下载pcre源码,可以到http://sourceforge.ne
在linux C中使用正则表达式pcre
程序示例:#include &amp;lt;stdio.h&amp;gt; #include &amp;lt;string.h&amp;gt; #include &amp;lt;pcre.h&amp;gt; #define OVECCOUNT 3000 #define EBUFLEN 128 #define BUFLEN 1024   int main() {     pcre *re;     const char *error;     i...
pcre正则表达式库
著名的pcre正则表达式库,功能非常强大,优化性能好,速度快,推荐使用!
PCRE兼容正则表达式
1 preg_grep( string pattern,array intput)函数返回匹配pattern的数组 array preg_grep(string pattern,array intput); 函数功能: 是input中的元素意义匹配pattern人最后返回有所有相批评俄的元素所有的数组。 $preg='/\d{3,4}-?\d{7,8}/';//这里要注意正则...
PCRE正则表达式(零)环境搭建
windows下用vs2013编译PCRE,使用PCRE,PCRE初体验。
PHP 正则表达式(PCRE)
  参考: https://www.yuque.com/docs/share/e9488eef-4c33-447f-87be-b32fee8f09fe  
请教pcre正则表达式
比如我现在又一个字符串rn“/message?dd=eee&def=ggg”rn现在想把eee和ggg取出来应该怎么做?
C语言动态内存分配函数解析
C语言动态内存分配函数详细的解析,带实例和程序片段,有助于深入理解!
Linux C语言函数解析
本书详细讲解了C语言的各个函数的表头文件,函数定义,函数说明,有助于理解函数的用法。
C语言解析 C语言解析
好资源,不敢独享。初级学者的很好的资源 好资源,不敢独享。初级学者的很好的资源
php PCRE函数的使用
替换字符串 mixed preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &amp;amp;$count ]] ) mixed preg_filter ( mixed $pattern , mixed $replacement , mixed $subjec...
一、正则表达式函数解析
1.正则表达式参数说明 建议用$pattern = 正则表达式   $subject = 匹配的目标数据   这个两个参数来命名。 2.正则表达式数据输出函数简介 &amp;lt;?php function show($var = null){     if (empty($var)){         echo 'null';     }elseif (is_array($var) || is...
[分享]php pcre正则表达式完全教程--pcre官方文档翻译
翻译有不正确的地方, 恳请指正......本翻译过段时间录入php官方文档rntranslator: slefimprrnblog: http://blog.csdn.net/lgg201rnmail: lgg860911@yahoo.com.cnrnrnrn[b]PCRE[/b]rnrn[b]简介[/b]rnrnPCRE 扩展的正则表达式会有一个每个线程都可用的全局缓存用来缓存编译后的正则表达式.rnPCRE在php4.2.0中是默认启用的, 可以通过—without-pcre-regex禁用. 在php 5.3.0之后, 这个扩展不能被禁用. 但是仍然可以使用—with-pcre-regex=DIR来实用一个外部的pcre库进行编译rn配置rnrnpcre.backtrack_limit: 默认100000, pcre回溯限制rnpcre.recursion_limit: 默认100000, pcre的递归限制. 需要注意的是, 如果将这个值设置为一个很大的数字, 你可能会消耗掉所有的进程可用堆栈, 并且最终导致php崩溃(直到到达系统限制的堆栈大小)rnrn[b]预定义常量[/b]rnrnPREG_PATTERN_ORDERrnrn结果按照”规则”排序, 仅用于preg_match_all, 即$matches[0]是完整规则的匹配结果, $matches[1]是第一个子组匹配的结果rnPREG_SET_ORDER:rnrn结果按照”集合”排序, 仅用于preg_match_all, 即$matches[0]保存第一次匹配结果的所有结果(包含子组)信息, $matches[1]保存第二次的结果信息rnPREG_OFFSET_CAPTURErnrn在捕获的结果中, 不仅包含结果子串, 还会包含子串在原字符串中的位置.rnPREG_SPLIT_NO_EMPTYrnrn告知preg_split仅返回非空的部分rnPREG_SPLIT_DELIM_CAPTURErnrn告知preg_split同时捕获规则中的括号表达式匹配到的内容rnPREG_SPLIT_OFFSET_CAPTURErnrn如果设置了这个标记, 每次匹配得到的结果的offset位置将会被同时返回.rnPREG_NO_ERRORrnrn如果preg_last_error调用后返回此值, 则表明正则没有错误rnPREG_INTERNAL_ERRORrnrn如果preg_last_error调用后返回此值, 则表明发生了PCRE内部错误rnPREG_BACKTRACK_LIMIT_ERRORrnrn如果回溯次数超过预设的值, preg_last_error函数返回此值rnPREG_RECURSION_LIMIT_ERRORrnrn如果递归次数超过预设的值, preg_last_error函数返回此值rnPREG_BAD_UTF8_ERRORrnrn如果preg的最后错误是由于异常的utf-8数据(仅在运行在utf-8模式正则表达式情况下)导致的, 那么preg_last_error返回此值rn rnrnPREG_BAD_UTF8_OFFSET_ERRORrnrn如果偏移量与合法的utf-8代码(仅在运行在utf-8模式正则表达式情况下)的开始点不匹配, preg_last_error的调用返回此值rnPCRE_VERSIONrnrn返回pcre版本号和发布日期.rnrn[b]模式修饰符[/b]rnrni PCRE_CLASSESrn大小写不敏感的修饰符rnm PCRE_MULTILINErn多行匹配, 默认情况下, PCRE认为目标字符串是一组单行字符组成的(然而实际上它可能会包含多行). 元字符^仅匹配字符串的开始位置, 而元字符$则仅匹配字符串的末尾, 或者新行之前(除非设置了D修饰符). 这个修饰符和perl中工作一直, 使用后, ^和$会匹配每一行的开始和结尾rn如果目标字符串中没有\n字符或者模式中没有出现^和$, 则设置此修饰符是没有任何影响的.rns PCRE_DOTALLrn用来增强字符类.(点号)的功能, 默认情况下, 点号匹配任意字符, 但不包括换行符及以后内容. 使用此修饰符后, 可以匹配任意字符包括换行符rnx PCRE_EXTENDEDrn如果设置了这个修饰符, 模式中的空白字符, 除非被转义或者在一个字符类中, 否则都被忽略. 在一个未转义的#之后直到下一个换行符之间的内容都会被正则表达式引擎忽略以方便添加注释.rne PREG_REPLACE_EVALrn使用此修饰符后, preg_replace的$replacement参数除了可以使用正常的反向引用来取得匹配值, 还可以在其中书写eval语法允许的字符串进行求值, 并将返回结果用于最终的替换.rnA PCRE_ANCHOREDrn如果设置了此修饰符, 模式被强制成为”anchored”(锚点), 也就是说约束使其始终从字符串的嘴前面开始搜索. 这个影响也可以通过构造适当的规则来实现(perl中只能这样实现)rnD PCRE_DOLLAR_ENDONLYrn如果设置了这个修饰符, $会匹配目标字符串的结尾之前, 而如果没有设置这个修饰符, 如果目标字符串最后一个字符时换行符, $就会匹配该换行符之前而不是字符串结尾之前.rn如果设置了m修饰符, 则这个修饰符会被忽略. 这一点和perl不一致rnSrn当一个模式需要多次使用的时候, 我们为了获得更高的匹配效率, 值得花费一些时间对其进行分析. 如果设置了这个修饰符, 将会进行这个额外的分析. 当前, 这种对一个模式的分析仅仅适用于非锚点的匹配(即没有一个单一固定的开始字符)rnU PCRE_UNGREEDYrn这个修饰符逆转了贪婪的模式, 如果没有这个设置, 默认情况下的正则匹配时贪婪的, 量词后增加了?的模式是非贪婪的, 但是如果设置了这个修饰符, 则刚好相反.rn这个规则与perl是不兼容的.rn也可以在模式中使用?U来达到同样的效果rnX PCRE_EXTRArn这个修饰符启用了一个PCRE中与perl不兼容的额外功能. 任意反斜线后面跟一个没有特殊含义的字符会导致一个错误, 以此来保留这些组合以备后期扩展.rn默认情况下, 和perl一样, 反斜线后跟一个没有特殊含义的字符会以该字符原意解释.rn当前没有任何其他特性受此修饰符控制rnJ PCRE_INFO_JCHANGEDrn与内部选项?J相同, 用来改变本地PCRE_DUPNAMES选项. 允许子组有重复的名字rnu PCRE8rn这个修饰符打开一个PCRE中与perl不兼容的额外功能. 模式字符串被认为是UTF-8的.rnrn[b]与perl的不同之处[/b]rnrn默认情况下,使用C库函数isspace()判定一个任意字符是否是空白字符, 尽管可以实用字符类表替代编译PCRE. 通常isspace()匹配空格, 换页, 换行, 回车, 水平制表符和垂直制表符. perl5不再将垂直制表符包括到空白字符集中. \v这个转移实际上在很长时间都没有得到perl文档的承认. 然而, 这个字符自身被认为是一个空白字符至少是在5.002之上. 在5.004和5.005它不和\s匹配.rnPCRE 不允许前瞻断言的量词修饰, perl允许这样做, 但是这并不是你想象的那样.例如, (?!a)3并不意味着断言接下来三个字符不是a, 而是断言下一个字符不是a并进行3次.rn子模式的捕获发生在负向前瞻内部时会被计算, 但是在偏移向量中病没有设置它们的条目. perl从断言失败之前匹配得到的这些模式匹配结果中设置了它的数值变量 (因此是成功的), 但这也仅在负向前瞻断言只有一个分支的时候.rn尽管目标字符串中支持二进制0字符, 但是他们在模式字符串中是不允许的, 因为他们是通过普通的C字符串传递的, 而C字符串以0字符结束. 转义序列”\x00”可以在模式中用于表示二进制0字符.rn不支持下面的perl转义序列: \I, \u, \L, \U. 实际上这些都是通过perl一般的字符串处理来实现的, 而不是模式匹配引擎的一部分.rn不支持perl的\G断言, 因为它与单模式匹配没有关系.rn很显然, pcre不支持(?代码)和(??代码)的构造. 然而, 它支持递归模式rn在perl 5.005_02中当设置为捕获字符串的模式中有部分重复的时候会有一些古怪的现象发生, 比如: /^(a(b)?)+$/捕获aba的时候, $2会被设置为b, 然而, 如果把模式修改为/^(aa(bb)?)+$/的时候, 用aabbaa去匹配, $2将不会得到匹配结果. 如果将模式修改为/^(aa(b(b))?)+$/的时候, $2和$3又都能够匹配到结果. 在perl 5.004中$2在这几种情况下都能够得到匹配结果, 并且PCRE中夜市这样. 如果未来perl修改为一致的那就不同了, PCRE可能接下来会修改.rn还有一个没有解决的差异是perl 5.005_02中, 模式/^(a)?(?(1)a|b)+$/会匹配字符串”a”, 而pcre中不会. 然而, perl和pcre中/^(a)?a/匹配”a”都会得到相同的结果, $1都未被设置.rnPCRE提供了一些对perl正则表达式的扩展rn1. 虽然后瞻断言要求必须匹配固定长度的字符串, 然而后瞻断言的每个可选分支还是可以实用不同长度的字符串的, 而perl 5.005中要求它们必须拥有同样的长度rn2. 如果PCRE_DOLLAR_ENDONLY设置了并且PCRE_MULTILINE没有设置, $元字符仅匹配字符末尾之前rn3. 如果PCRE_EXTRA设置了, 反斜线紧跟一个没有特殊含义的字符将会导致错误rn4. 如果PCRE_UNGREEDY设置了, 贪婪模式控制被逆转, 即: 默认是非贪婪模式, 在量词后增加?表明是贪婪模式.rnrn[b]与POSIX正则的区别[/b]rnrnPCRE函数需要的模式以分隔符闭合的包含.rn不像POSIX, PCRE扩展没有专门的函数用来区分大小写敏感. 取而代之的是使用i这个模式修饰符来达到相同的效果. 其他模式修饰符也可以用来改变匹配策略.rnPOSIX函数从最左面寻找最长的匹配, 但是PCRE在查找到第一个合法匹配后就结束. 如果字符串没有匹配到结果, 那么两者是没有差别的, 但是如果匹配到结果, 两者就会在结果和速度上都有差别. 为了说明这个不同之处, 考虑Jeffrey Friedl著的”精通正则表达式”一书中的例子. 使用one(self)?(selfsufficient)?这个模式来匹配oneselfsufficient这个字符串, PCRE将会产生oneself这个结果, 但是POSIX将会匹配到完整的字符串oneselfsufficient. 两者都从原始字符串中匹配到了结果, 但是POSIX需要的是最长的结果.rnrn[b]函数列表[/b]rnrnmixed preg_replace(mixed $pattern, mixed $replacement, mixed $subject[, int $limit = -1[, int &$count]])rnrn执行一个正则表达式的搜索和替换. 从$subject中搜索与$pattern匹配的结果并使用$replacement替换它们.rn$patternrn要搜索的模式. 可以是字符串或者一个字符串数组.rne修饰符可以使preg_replace()函数在进行了参数替换(后向引用)后$replacement参数被当做php代码来执行. 请确保$replacement是合法的php代码, 否则会在包含preg_replace()的行上引发一个解析错误rn$replacementrn用于替换的字符串或字符串数组. 如果这个参数是字符串, 并且$pattern参数是一个数组, 所有的模式都是用这个字符串描述的规则进行替换. 如果$pattern和$replacement都是数组, 每个模式是用$replacement中对应的字符串进行替换. 如果$replacement中的元素比$pattern中的元素少, 那么$pattern中多出来的模式是用空字符串进行替换.rn$replacement可以使用\\n或$n进行后向引用, 后者是首选的语法. 每个这样的后向引用语法会被替换为模式捕获到的第n个子组的匹配结果文本. n可以是0-99之间的数字. \\0或者$0后向引用的是整个模式匹配到的结果文本. 捕获子组的序列(这里的n)指的是代表子组的圆括号中的左括号在模式中出现的顺序(即第一个左括号代表的子组n=1, 第二个n=2, 依此类推), 如果想要在$replacement中使用反斜线, 需要对其进行转义(即PHP字符串”\\\\”)rn当$replacement规则使用后向引用工作时, 并且后向引用后面需要立即使用一个数值, 比如”\\11”这个时候, 正则表达式引擎是没有办法判定你后向引用的子组是”\\1”而不是”\\11”, 这种情况下使用语法\$11来解决, 用将后向引用子组序号1和原文字符串1进行隔离.rn当使用e修饰符时, 这个函数转义字符串中的一些字符(即: ’, “, \和空字符), 替换后向引用, 这些完成之后, 确保后向引用替换没有导致语法错误, 然后会将$replacement作为php代码执行, 并将执行结果作为最终用来替换的字符串.rn$subjectrn用于搜索和替换的源字符串或字符串数组.rn如果$subject是一个数组, 会搜索和替换每一个$subject中的元素, 并且同样返回一个数组rn$limitrn每个模式在每个$subject字符串中最大可以被替换的次数. 默认-1(不限制)rn$countrn一个引用方式的参数, 如果指定, 该参数最终被填充为进行替换的次数.rn返回rn如果$subject是一个数组, 返回数组, 否则返回字符串.rn如果找到匹配, 返回替换后新的$subject. 其他情况下$subject会无变化返回. 当发生错误时返回NULL.rnmixed preg_filter(mixed $pattern, mixed $replacement, mixed $subject[, int $limit = -1[, int &$count]])rnrn这个函数等同于preg_replace, 除了它仅仅返回匹配结果. 更多关于此函数如何工作的信息, 请查看preg_replace文档rn如果$subject参数是一个数组, 返回一个数组描述的匹配结果, 否则返回stringrn如果没有匹配到任何结果或发生了错误, 在$subject是数组时返回空数组, 否则返回NULLrnarray preg_grep(string $pattern, array $input[, int $flags = 0])rnrn对$input中的每一个元素使用$pattern进行测试, 返回匹配的元素组成的数组. 如果$flags的值为PREG_GREP_INVERT, 那么将会返回不匹配的元素组成的数组. 返回的数组中元素的索引会被保留.rnint preg_last_error(void)rnrn返回最后一次pcre正则表达式执行的错误代码.rnPREG_NO_ERROR/PREG_INTERNAL_ERROR/PREG_BACKTRACK_LIMIT_ERROR/PREG_RECURSION_LIMIT_ERROR/PREG_BAD_UTF8_ERROR/PREG_BAD_UTF8_OFFSET_ERROR等错误代码的意义详见pcre预定义常量部分.rnint preg_match_all(string $pattern, string $subject, array &$matches[, int $flags[, int $offset]])rnrn从$subject中搜索所有与$pattern给定正则表达式匹配的结果, 并且将匹配到的结果按照$flags指定的顺序放入$matchesrn在第一个匹配发现后, 子序列继续搜索直到最后一个匹配.rn$patternrn用于搜索的模式rn$subjectrn输入字符串rn$matchesrn保存匹配结果的多维数组, 顺序依赖于$flags参数rn$flagsrn可以是以下值的组合.(注意, 这并不是说PREG_PATTERN_ORDER和PREG_SET_ORDER可以同时使用)rn如果没有给定任何flag, 默认启用的是PREG_PATTERN_ORDERrn译注: 一个模式可能在字符串中发现多个匹配, 一个模式也会有多个子组, 这里的排序flag用来指明第一维表示子组还是多次匹配rnPREG_PATTERN_ORDER: $matches[0]中包含第一个子组中所有匹配到的结果, $matches[1]中包含第二个子组中所有匹配到的结果.rnPREG_SET_ORDER: $matches[0]中包含第一次匹配得到的结果(包含所有子组), $matches[1]包含第二次匹配得到的结果(包含所有子组)rnPREG_OFFSET_CAPTURE: 如果传递了这个flag, 每一个匹配的字符串在返回时都会包含它在原始字符串中的偏移量. 注意: 这会改变$matches中最终输出的匹配结果数组元素, 原来是二维数组, 且第二维值是匹配到的字符串, 使用此flag后, 第二维会成为一个数值索引的数组, 其中第一个元素是匹配得到的字符串, 第二个元素是该匹配结果在原始字符串($subject)中的偏移量rn$offsetrn模式$pattern从字符串($subject)的什么位置开始搜索. 这个可选参数用来控制从指定位置开始搜索(单位是字节)rn注意: 实用$offset参数和传递实用substr($subject, $offset)截取后的$subject到preg_match_all()函数中是不一样的, 因为使用了$offset之后, $pattern依然可以使用^, $元字符进行首尾判断, 并且可以使用(?<=xx)进行前瞻断言.rn返回rn返回完成模式成功匹配的次数(可能是0), 当发生错误时返回FALSErnchangelogrnphp5.2.2中, $pattern开始可以使用(?), (?’name’)以及(?P)来进行子组命名, 之前的版本中只接受(?P)语法.rnint preg_match(string $pattern, string $subject[, array &$matches[, int $flags[, int $offset]]])rnrn使用$pattern搜索$subject的一个匹配, 如果给定了$matches参数, 则该参数用来保存搜索结果.rn除了$flags参数不能接受PCRE_PATTERN_ORDER和PCRE_SET_ORDER来决定顺序外, 其余参数用法和preg_match_all()一致rn返回$pattern匹配的次数. 它可能是0次(没有匹配)或者1次(因为preg_match()在搜索到一个匹配之后就会停止)rn当发生错误的时候, 返回false.rn注意: 如果你仅仅想判断一个字符串是否包含在另外一个字符串中, 不要使用preg_match, 请使用strpos或strstrrnstring preg_quote(string $str[, string $delimiter = null])rnrn对$str中的每一个正则表达式语法定义的特殊字符进行转义. 这通常用于你有一个运行时字符串需要用作正则表达式进行匹配而它又包含特殊的正则表达式字符的时候.rn特殊的正则表达式字符包括: . \ + * ? [ ^ ] $ ( ) = ! < > | : -rn可选的$delimiter参数用来指定额外的需要进行转义的字符, 这通常用于对你的正则表达式分隔符进行转义, 比如通常用作正则表达式分隔符的/rnmixed preg_replace_callback(mixed $pattern, callback $callback, mixed $subject[, int $limit = -1[, int &$count]])rnrn这个函数和preg_replace()的功能相同, 不同点在于$replacement使用了一个回调函数进行自定义的构造, 每一个获取到的对$pattern的完整匹配会对应一次替换, 也就是对$callback的调用, 调用时$callback接受到的参数是所有的子组, 其中第一个参数是第0个子组, 也就是对$pattern的完整匹配. 最终用作替换的字符串是$callback的返回值.rn其他参数与preg_replace相同.rnarray preg_split(string $pattern, string $subject[, int $limit = -1[, int $flags = 0]])rnrn用给定的$pattern分隔字符串形成数组返回.rn$limitrn用来限制最终返回的数组的最大长度, 默认-1表示不限制, 0也表示不限制.rn$flagsrn可以是以下值的组合rnPREG_SPLIT_NO_EMPTY: 如果此项被设置, 最终返回的数组仅包括分隔之后非空的部分rnPREG_SPLIT_DELIM_CAPTURE: 如果此项设置, 在$pattern中的括号表达式奖会被捕获并作为返回rnPREG_SPLIT_OFFSET_CAPTURE: 如果此项设置, 得到的分隔结果中不仅包含分隔后的字符串, 还会包括该子串在原始字符串中的偏移量. (译注: 假设使用”/ab/”分隔字符串”helloabworld”原来返回array(“hello”, “world”)), 那么使用此标记后返回array(array(“hello”, 0), array(“world”, 7))rn注意: 如非必须, 不要使用preg_split, 你可以使用explode()或str_split()替代.rnpcre/posix函数总结rnrnereg_replace, eregi_replace, preg_replace, preg_replace_callback, preg_filter用来做正则替换rnereg, eregi, preg_match, preg_match_all用来做正则匹配rnsplit, spliti, preg_split用来做正则分割rnpreg_grep用来做正则查找.
C语言分隔符报文解析通用函数
用C语言实现 分隔符报文的解析,例如|1|2|3| 1|2|3 |1|2|3 1|2|3| 这几种模式都可以成功解析出各个域
命令行选项解析函数(C语言):getopt()和getopt_long()
上午在看源码项目 webbench 时,刚开始就被一个似乎挺陌生函数 getopt_long() 给卡住了,说实话这函数没怎么见过,自然不知道这哥们是干什么的。于是乎百度了一番,原来是处理命令行选项参数的,的确,正规点的大型程序一般第一步就是处理命令行参数的,接着才是主干程序。在百度和 man 的帮助下,找到了具体使用方法和解释,二话不说赶紧学习一下,并总结出文档记录一下。     平时在写
C语言解析命令行函数:getopt系列
头文件:/usr/include/getopt.h 函数传入较长参数 函数getopt_long_only和getopt_long两者用法差不多,都可以用来解析命令行选项 函数出处 #include &lt;getopt.h&gt; //getopt_long()头文件位置 int getopt_long (int ___argc, char *const *___argv, ...
c语言 解析常用字符操作函数
       在c语言中有很多的字符操作函数,而我们经常用到的字符操作函数有strcpy ,strncpy ,strcat ,strcmp ,strlen ,strlwr ,strupr ,gets ,puts ,等等很多很多。       下面我们来解析一下这些字符操作函数。        1.strcpy(字符数组)        这个函数的作用是字符串的拷贝,在c语言的函数栈帧中有一块...
利用反汇编手段解析c语言函数
利用反汇编手段解析c语言函数,讲解详细,不错的一本书
C语言 函数递归例题解析
1.接受一个整形值(无符号),把它转换为 字符并打印它 模拟实现strlen()函数。 3.求n的阶乘 4.斐波那契数列 总结 1.接受一个整形值(无符号),把它转换为 字符并打印它 void fun(int x) { if (x &amp;gt; 9) { fun(x/10); } printf(&quot;%d\n&quot;, x%10); } in...
c语言函数c语言函数
c语言基本函数,各种要点,比较全面! c语言基本函数,各种要点,比较全面!
C语言函数速查 C语言函数大全 C函数
C语言函数速查 C语言函数大全 C函数,带查询的C函数,简单好用!!
正则表达式C语言源码
正则表达式算法源码,C语言编写,需要的快下。
C语言正则表达式库
C语言正则表达式库,兼容perl的正则表达式库,使用简介、方便
C语言正则表达式REEC.zip
REEC是一个精简,高效的C语言正则表达式引擎,它使得C语言开发中支持正则表达式,目前已经进化到了1.2.0版本,可以说无论从功能上,还是效率都到达了很好的应用水平,该引擎除支持常用的正则标准之外,还有一些原创的特性,例如正则式的分组、模式敏感等级等等,使得正则表达式更加灵活多变。 编者: 这套正则表达式适用于内存稀少的嵌入式系统,从09年应用至今,据我们所了解的REEC已经在商用产品中做到了千万终端的应用,性能跟稳定性已经过了市场考验。   引擎特性 <(a-zA-Z){1,}>含义:至少匹配1个,并且至多匹配n个字母。 <(0-9)^1> 含义:匹配1个数字。 <(0-9)^> 含义:匹配n个数字。 <(0-9){1,1}> 含义:至少匹配1个,并且至多匹配一个数字。 <(0-9){1,}> 含义:至少匹配1个,并且至多匹配n个数字。 <(symbol)^1> 含义:匹配1个symbol,symbol长度跟取值范围不限。 <(symbol)^> 含义:匹配n个symbol,symbol长度跟取值范围不限。 <(symbol){1,1}> 含义:至少匹配1个,并且至多匹配一个symbol,symbol长度跟取值范围不限。 }> 含义:至少匹配1个,并且至多匹配n个symbol,symbol长度跟取值范围不限。 <()^1> 含义:匹配1个任意字符。 <()^> 含义:匹配n个任意字符。 <(){1,1}> 含义:至少匹配1个,并且至多匹配一个任意字符。 <(){1,}> 含义:至少匹配1个,并且至多匹配n个任意字符。 <(a-z0-9)^1> 含义:匹配1个小写字母或数字。 <(a-z0-9)^> 含义:匹配n个小写字母或数字。 <(a-z0-9){1,1}> 含义:至少匹配1个,并且至多匹配一个小写字母或数字。 <(a-z0-9){1,}> 含义:至少匹配1个,并且至多匹配n个小写字母或数字。 <(A-Z0-9)^1> 含义:匹配1个大写字母或数字。 <(A-Z0-9)^> 含义:匹配n个大写字母或数字。 <(A-Z0-9){1,1}> 含义:至少匹配1个,并且至多匹配一个大写字母或数字。 <(A-Z0-9){1,}> 含义:至少匹配1个,并且至多匹配n个大写字母或数字。 <(a-zA-Z0-9)^1> 含义:匹配1个字母或数字。 <(a-zA-Z0-9)^> 含义:匹配n个字母或数字。 <(a-zA-Z0-9){1,1}> 含义:至少匹配1个,并且至多匹配一个字母或数字。 <(a-zA-Z0-9){1,}> 含义:至少匹配1个,并且至多匹配n个字母或数字。 例子 表达式:[<(哈哈你好)1>|<(你好哈哈)1><(0-9)*>][<(哈哈)1>|<(你好)1><(0-9)>][<(0-9)^>] 模式串:"54233你好23322323sdafashaha323hasdf你,本次哈哈你好你好哈哈123456哈235" 返回值:“123456”   其它 RO RW段共10KB。  RAM 标签:REEC
C语言写的正则表达式
linux下 用C语言 写的正则表达式
Linux下的C语言正则表达式
C语言不包含STL中的大量的数据结构,为此,要在C语言中使用正则式,需要使用另外单独的其他的库,本资源是可以直接使用的正则式库,通过验证
OK_REEC正则表达式(C语言)
REEC是一个精简,高效的C语言正则表达式引擎,它使得C语言开发中支持正则表达式,目前已经进化到了1.2.0版本,可以说无论从功能上,还是效率都到达了很好的应用水平,该引擎除支持常用的正则标准之外,还有一些原创的特性,例如正则式的分组、模式敏感等级等等,使得正则表达式更加灵活多变。
c语言正则表达式应用
正则表达式是能极大地提高工作效率的工具,使用过Linux下各种具备RE特性的工具的人一定对此深有感触。很多语言都支持RE,用的最多的当然是脚本,其中以perl最盛。不过,用C语言来用RE不是很多见,但是有时候也很有用,我最近也是看到别人说道这个,所以搜了一些资料加上自己的体会来说一说RE在C语言里的应用。C语言本身不具备RE特性,但是有很多库,在Linux下你可以很方便的使用regex.h提供的库
C语言正则表达式
1.int regcomp (regex_t *compiled, const char *pattern, int cflags) 这个函数把指定的规则表达式pattern编译成一种特定的数据格式compiled,这样可以使匹配更有效。函数regexec 会使用这个数据在目标文本串中进行模式匹配。执行成功返回0。 regex_t 是一个结构体数据类型,用来存放编译后的规则表达式,...
linux c 语言 正则表达式
文章定位:初学者写坑 关于正则表达式的基础,请参考 http://rubular.com/  关于函数解释,请参考 http://man7.org/linux/man-pages/man3/regex.3.html 自己写了段小代码,从URL中提取处主机域名和剩余部分。 #include #include #include #include int main(int argc, ch
PHP正则表达式函数解析与正则表达式基本语法
一、PHP正则表达式函数解析 preg_match();preg_match_all();表单验证等 //email地址的合法性-preg_match(),匹配结果可以看作是bool值 preg_replace();非法词的过滤 //f**k 二、正则表达式基本语法 测试正则表达式的工具 中午匹...
相关热词 c# stream 复制 android c# c#监测窗口句柄 c# md5 引用 c# 判断tabtip 自己写个浏览器程序c# c# 字符串变成整数数组 c#语言编程写出一个方法 c# 转盘抽奖 c#选中treeview