регулярное выражение не работает - PullRequest
0 голосов
/ 11 августа 2011

Это строка, которую я хочу сопоставить

str = "hello_my_world";

         regex_t reg;
         if (regcomp(&reg, pattern, REG_EXTENDED | REG_ICASE) != 0) {
             exit (-1);
         }

         if (regexec(&reg, str, 0, NULL, 0) != 0) {
             regfree(&reg);
             /* did not match */
         }

         regfree(&reg);
     }

если шаблон hello_*, он возвращает true. но если шаблон равен hello_*_world, он не ... ожидается ли это?

как я могу это сопоставить?

Ответы [ 3 ]

5 голосов
/ 11 августа 2011

Вы должны прочитать о синтаксисе регулярных выражений. Шаблон hello_*_world будет соответствовать «привет», за которым следует ноль или более символов подчеркивания, затем еще один знак подчеркивания и «мир».

То, что вы хотите для шаблона - это hello_.*_world, который отображает «hello_», за которым следует ноль или более произвольных символов, после которых следует «_world».

Шаблон hello_* соответствует, потому что ваша строка содержит «привет», за которым следует ноль или более подчеркиваний.

2 голосов
/ 11 августа 2011

Regex * отличается от glob *: оно означает «0 или более из предыдущего атома»

Так что я думаю, что вы хотите:

hello_.*_world
1 голос
/ 11 августа 2011

Попробуйте шаблон hello_.+_world или hello_[A-Za-z]+_world.

* применяется к символу перед ним (0 или более вхождений), поэтому он соответствует hello_world, hello__world, hello___world и т. Д.

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