Соответствие строк в 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 ++ неверен. Как заставить их выводить одинаковый результат.