在C中的两个特定字符串之间提取字符串

Extract string between two specific strings in C

如何提取两个指定字符串之间的字符串? 例如: <title>Extract this</title>。有没有一种简单的方法可以使用 strtok() 或更简单的方法来获取它?

编辑:两个指定的字符串是<title></title>,提取的字符串是Extract this

  • 使用 strstr().
  • 搜索第一个子字符串
  • 如果找到,保存子串的数组索引
  • 从那里搜索下一个子字符串。
  • 如果找到,[ [start of sub string 1] + [length of sub string 1] ][start of sub string 2] 之间的所有内容都是您感兴趣的字符串。
  • 使用strncpy()memcpy()提取字符串。

这是一个如何做到这一点的例子,它不检查输入字符串的完整性

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

char *extract(const char *const string, const char *const left, const char *const right)
{
    char  *head;
    char  *tail;
    size_t length;
    char  *result;

    if ((string == NULL) || (left == NULL) || (right == NULL))
        return NULL;
    length = strlen(left);
    head   = strstr(string, left);
    if (head == NULL)
        return NULL;
    head += length;
    tail  = strstr(head, right);
    if (tail == NULL)
        return tail;
    length = tail - head;
    result = malloc(1 + length);
    if (result == NULL)
        return NULL;
    result[length] = '[=10=]';

    memcpy(result, head, length);
    return result;
}

int main(void)
{
    char  string[] = "<title>The Title</title>";
    char *value;

    value = extract(string, "<title>", "</title>");
    if (value != NULL)
        printf("%s\n", value);
    free(value);

    return 0;
}

@Lundin 先生的作品不错。但是,只是为了添加更通用的方法(不依赖于 <tag> 值本身),您也可以这样做,

  1. 使用 strchr()
  2. 找到 < [标签左尖括号] 的第一个实例
  3. 使用 strchr().
  4. 找到 > [tag closing angle bracket] 的第一个实例
  5. 保存索引和两个索引的差值,将字符串复制到一个临时数组中。将视为 tag 值。
  6. 使用 strrchr()
  7. 找到 < [标签左尖括号] 的最后一个实例
  8. 使用 strrchr().
  9. 查找 > [标签右尖括号] 的最后一个实例
  10. 再次保存索引和两个索引的差值,将字符串复制到另一个临时数组中。与先前存储的 tag 值进行比较,如果相等,则执行从 acualarray[first_last_index](结束起始标记)到 acualarray[last_first_index](结束标记开始)的 memcpy() / strdup()。 )