How can I check if a string contains a specific substring along with any additional text (e.g., "hello <any text e.g., meatballs>"
) in C? Here is my code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "../include/ANSI-color-codes.h"
int main(int argc, char* const argv[]) {
if (argc != 2) {
printf(BLU "VPWL (Very Powerful Web Language) \nyou build big bundle Small\n" reset);
return 1;
}
FILE *fptr;
fptr = fopen(argv[1], "r");
char FileString[2097152]; // 2 MB, approximately
while (fgets(FileString, 2097152, fptr)) {
printf("%s", FileString);
if (strstr(FileString, "<button('') />")) {
// Code for processing the matching line
}
}
fclose(fptr);
return 0;
}
I would like to know how to properly check if the string in FileString contains the substring <button('') />
along with any additional text in between the Quotes (not on the beginning and end). Any help or guidance would be appreciated. Thank you!
i tried %s
it did not work
There is no standard regular expression package in C, for your purpose you can write an ancillary function that finds the 2 substrings:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define BUFFER_SIZE 2097152
int find_matches(const char *str, const char *spec1, const char *spec2, size_t *offsets) {
const char *p1 = strstr(str, spec1);
if (p1 == NULL)
return 0;
const char *p2 = p1 + strlen(spec1);
const char *p3 = strstr(p2, spec2);
if (p3 == NULL)
return 0;
const char *p4 = p3 + strlen(spec2);
offsets[0] = p1 - str;
offsets[1] = p2 - str;
offsets[2] = p3 - str;
offsets[3] = p4 - str;
return 1;
}
int main(int argc, char *argv[]) {
if (argc != 2) {
printf("VPWL (Very Powerful Web Language)\nyou build big bundle Small\n");
return 1;
}
FILE *fptr = fopen(argv[1], "r");
if (fptr == NULL) {
fprintf(stderr, "cannot open %s: %s\n", argv[1], strerror(errno));
return 1;
}
char FileString[BUFFER_SIZE]; // 2 MB, approximately
int lineno = 0;
while (fgets(FileString, sizeof FileString, fptr)) {
const char *p = FileString;
size_t off[4];
lineno++;
//printf("%s", FileString);
while (find_matches(p, "<button('", "') />", off)) {
// Code for processing the matching line
printf("%s:%d: found match: %.*s\n", argv[1], lineno,
(int)(off[3] - off[0]), p + off[0]);
printf("%s:%d: substring: %.*s\n", argv[1], lineno,
(int)(off[2] - off[1]), p + off[1]);
p += off[3];
}
}
fclose(fptr);
return 0;
}