C регулярное выражение, чтобы получить позицию строки и заменить другую - PullRequest
1 голос
/ 12 сентября 2010

Q1.Я хочу сопоставить "& JOY" в строке ввода пользователя, например, "bla bla & JOY bla bla & JOY blabla" Как я могу написать выражение регулярного выражения для этого, и есть ли какие-либо функции C регулярного выражения, которые могут вернуть всепозиции, где происходят совпадения?
Q2.Если я хочу заменить & JOY другой строкой, есть ли удобная функция C для этого?

Ответы [ 3 ]

3 голосов
/ 12 сентября 2010
Стандартная библиотека

C не предоставляет функции регулярных выражений.Однако, поскольку ваш пример ищет фиксированную строку, вам не нужно регулярное выражение.Поиск подстроки достаточно.Это можно сделать с помощью функции strstr :

#include <string.h>
..........

char* text = "bla bla &JOY bla bla &JOY blabla";
char* pattern = "&JOY";
char* substr_ptr;
int pos;

while ( substr_ptr = strstr(pattern, text) )
{
    pos = substr_ptr - text;
    printf("found at %d\n", pos);
}

Что касается вашего второго вопроса - нет, такой функции нет.Вы должны сделать это вручную:

  • , если замещающая строка имеет ту же длину, что и подстрока, которую вы хотите заменить, просто перезапишите ее на месте ( memcpy );
  • в противном случае вам придется выделить память для результирующей строки и скопировать туда три части (исходную строку до появления подстроки, замену строки и оставшуюся часть исходной строки).
2 голосов
/ 12 сентября 2010

Похоже, ваше регулярное выражение не будет очень интересным.Это будет просто:

&JOY

Другими словами, похоже, что вы просто пытаетесь сопоставить литеральную подстроку.И если это все, что вы делаете, я не стал бы беспокоиться о регулярных выражениях (например, окунуться в кувалду с помощью кувалды).

0 голосов
/ 12 сентября 2010

R1. Может быть "& JOY" или "(& JOY)" для получения подстрок. Используйте regex.h, чтобы сделать это в C.

R2. Если будут другие более продвинутые регулярные выражения, используйте regex.h и реализуйте свою собственную функцию. Это очень просто.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...