Невозможно сопоставить целую строку с использованием регулярного выражения PCRE в CC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Невозможно сопоставить целую строку с использованием регулярного выражения PCRE в C

Сообщение Anonymous »

Это регулярное выражение '(?:[sdmt]|ll|ve|re)| ?\p{L}+| ?\p{N}+| ?[^\s\p{L}\p{N}]+|\s+(?!\S)|\s+ работает, как и ожидалось, и соответствует Ġmeousrtr, это можно увидеть в общая ссылка https://regex101.com/r/UR0P6T/1
Но когда я пытаюсь использовать библиотеку PCRE в C, я получаю 3 отдельных совпадения вместо 1. Я получаю этот символ Юникода Ġ имеет ширину 2 байта, и выражение совпадает для двух байтов, но не должно ли оно соответствовать всей строке, как https://regex101.com/r/UR0P6T/1
< pre class="lang-bash Prettyprint-override"># Output of regex expression
'(?:[sdmt]|ll|ve|re)| ?\p{L}+| ?\p{N}+| ?[^\s\p{L}\p{N}]+|\s+(?!\S)|\s+

# Matches
Match Succeeded at 0
�x
Match Succeeded at 1
�x
Match Succeeded at 2
meousrtrx

Ниже приведен код C:
#define PCRE2_CODE_UNIT_WIDTH 8
#include
#include
#include
using namespace std;

int main(int argc, char **argv)
{
PCRE2_SPTR expression = (PCRE2_SPTR) "'(?:[sdmt]|ll|ve|re)| ?\\p{L}+| ?\\p{N}+| ?[^\\s\\p{L}\\p{N}]+|\\s+(?!\\S)|\\s+";
PCRE2_SPTR text = (PCRE2_SPTR) "Ġmeousrtr";
PCRE2_SIZE eoffset;
PCRE2_SIZE *ovector;
pcre2_code *re;
pcre2_match_data *match_data;
char *c = (char *)expression;
while (*c)
printf("%c", (unsigned int)*c++);
printf("\n");

int error_number;
int result;
size_t start_offset = 0;
size_t text_len;
u_int32_t options = 0;

text_len = strlen((char *)text);

re = pcre2_compile(expression, PCRE2_ZERO_TERMINATED, 0, &error_number, &eoffset, NULL);
if (re == NULL)
{
PCRE2_UCHAR buffer[256];
pcre2_get_error_message(error_number, buffer, sizeof(buffer));
cout

Подробнее здесь: https://stackoverflow.com/questions/784 ... regex-in-c
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»