Это регулярное выражение '(?:[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
Невозможно сопоставить целую строку с использованием регулярного выражения PCRE в C ⇐ C++
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение