#c #regex
#c #регулярное выражение
Вопрос:
Я пытаюсь использовать регулярные выражения, используя regcomp() и regexec() из regex.h, и мне было интересно, есть ли какой-либо способ получить индекс совпадения, если он найден?
Например, если мое регулярное выражение просто «m», и я ищу «home», я бы хотел 2.
Комментарии:
1. Что вы видите заполненным в
regmatch_t *pmatch
переданном вами массивеregexec()
?
Ответ №1:
Взгляните на аргументы pmatch и nmatch для regexec() . Со страницы руководства:
regexec() используется для сопоставления строки, заканчивающейся нулем, с предварительно скомпилированным буфером шаблонов, preg. nmatch и pmatch используются для предоставления информации о местоположении любых совпадений. eflags могут быть побитовыми или одного или обоих REG_NOTBOL и REG_NOTEOL, которые вызывают изменения в поведении сопоставления, описанные ниже.
Комментарии:
1. Спасибо, я действительно просмотрел справочную страницу, но пропустил этот бит.
2. Эх, я пытался, но я действительно не понимаю, как использовать nmatch и pmatch. Они кажутся одинаковыми независимо от того, получаю я совпадение или нет, и независимо от того, где оно находится. Кроме того, я действительно не знаю, что делать с чем-то типа regmatch_t или size_t.