как сопоставить результат, пока \ 0 в строке? - PullRequest
0 голосов
/ 15 апреля 2019

Соответствие строк в C ++ не может получить правильный результат, но в Java может Java-код выглядит следующим образом

       String txt = "  static char k_a123[] =  \"fefeffefefwefwef/fefe/f/ef/ef\\0\"; int fefefefefeeffef = 123;     static char k_a123233[] =  \"fef/efef/efef\\0\";     int fwefnewff=21323;     static char k_a1233334[] =  \"<init>\\0\";     static char k_a123555[] =  \"fefefef)fefe/fef/V\\0\";     addAll(123,333);";
       String reg = "\\sstatic\\schar\\sk_\\S+\\s=";
       Pattern p = Pattern.compile(reg, Pattern.CASE_INSENSITIVE | Pattern.DOTALL);
       Matcher m = p.matcher(txt);
       while (m.find()) {
           for (int i = 0; i <= m.groupCount(); i++) {
               System.out.println(" ===== " + m.group(i));
           }
       }
// fowllow is outpu result
// =====  static char k_a123[] =
// =====  static char k_a123233[] =
// =====  static char k_a1233334[] =
// =====  static char k_a123555[] =

C ++ код выглядит следующим образом

    std::string s1 = "  static char k_a123[] =  \"fefeffefefwefwef/fefe/f/ef/ef\\0\"; int fefefefefeeffef = 123;     static char k_a123233[] =  \"fef/efef/efef\\0\";     int fwefnewff=21323;     static char k_a1233334[] =  \"<init>\\0\";     static char k_a123555[] =  \"fefefef)fefe/fef/V\\0\";     addAll(123,333);";

    std::string reee = "\\sstatic\\schar\\sk_\\S+\\s="; // Double Quote String 4
    std::string xxx(reee);

    std::regex rgx(xxx);

    std::smatch match;
    std::regex_search(s1, match, rgx);
    for (uint32_t index = 0; index < match.size(); index++)
    {
        printf("bbb [%d]  %s\n", index, std::string(match[index]).c_str());
    }
// xcode output
// bbbb [0]   static char k_v1[] =
// bbbb [1]  
/********* xcode output over ,nothing...... why?   *******************/

Я думаю, это потому, что c ++ усекает строку, используя \ 0, а java соответствует правильному результату. C ++ использует xcode для запуска кода Что я могу сделать, чтобы получить одинаковый результат для Java и C ++?

Эти 2 части кода могут быть скопированы и запущены напрямую, но вывод java правильный. C ++ неверен. Как заставить их выводить одинаковый результат.

1 Ответ

0 голосов
/ 16 апреля 2019

спасибо за: Дэн М.

следуй за ответом

Как сопоставить несколько результатов, используя std :: regex

 std::string s1 = "  static char k_a123[] =  \"fefeffefefwefwef/fefe/f/ef/ef\\0\"; int fefefefefeeffef = 123;     static char k_a123233[] =  \"fef/efef/efef\\0\";     int fwefnewff=21323;     static char k_a1233334[] =  \"<init>\\0\";     static char k_a123555[] =  \"fefefef)fefe/fef/V\\0\";     addAll(123,333);";

    std::string rrr = "\\sstatic\\schar\\sk_\\S+\\s=\\s(.*?);";
    std::regex r(rrr);
    const std::sregex_token_iterator end;
    for (std::sregex_token_iterator i(s1.cbegin(), s1.cend(), r, 1); i != end; ++i) {
        cout <<"\n ----- " << *i << endl;
    }
    cout << "====" << endl;


  [1]: http://how-to-match-multiple-results-using-stdregex
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...