正则表达式在两个单词之间得到逗号分隔值

时间:2015-11-16 13:43:27

标签: regex sublimetext3 pcre

我有以下查询& PRCE正则表达式,我希望得到表名。

<div id="wpbody-content">
  <div class="wrap">
    <h1>All Forms <a class="title-action" href="">Add New</a></h1>
  </div>
</div>

期望的结果 FROM student s, #prefix#.sometable, subject s, marks s WHERE ... (?<=\sfrom)\s+\K(\w*)(?=\s+where) student s subject s 我无法弄清楚如何从第一场比赛中提取。

我正在努力找到&amp;在崇高的文本编辑器中替换。

2 个答案:

答案 0 :(得分:0)

试试这个:\ s +(\ w * \ s)* s

    pcre *myregexp;
    const char *error;
    int erroroffset;
    myregexp = pcre_compile("\\s+(\\w*\\s)*s", PCRE_CASELESS | PCRE_EXTENDED | PCRE_MULTILINE | PCRE_DUPNAMES | PCRE_UTF8, &error, &erroroffset, NULL);
    if (myregexp) {
        int offsets[2*3]; // (max_capturing_groups+1)*3
        int offsetcount = pcre_exec(myregexp, NULL, subject, strlen(subject), 0, 0, offsets, 2*3);
        if (offsetcount > 0) {
            pcre_get_substring(subject, &offsets, offsetcount, 1, &result);
            // group offset = offsets[1*2];
            // group length = offsets[1*2+1] - offsets[1*2];
        } else {
            result = NULL;
        } 
    } else {
        // Syntax error in the regular expression at erroroffset
        result = NULL;
    }

答案 1 :(得分:0)

使用90%的@bobblebubble解决方案,我添加了一些条件来匹配我的情况。它的工作原理,但非常积极,并将编辑器挂在大文件或多个文件上。但我可以忍受我拥有的东西。解决方案:

(?is)(?:\bFROM\b|\G(?!^))(?:[\s,]|#[^\s,]++)*(\b\K(?:\s*(?!WHERE|LEFT\b)\w+){4,})\b(?=.*?\bWHERE\b)