Вы получаете 1
, потому что regex_search
возвращает только 1 совпадение, а size()
возвращает количество групп захвата + все значение соответствия.
Ваш matches
is ...:
Объект типа match_results (например, cmatch или smatch), который заполняется этой функцией, с информацией о результатах совпадения и любой найдены подматрицы.
Если [поиск по регулярному выражению] успешный, он не пуст и содержит ряд объектов sub_match: первый элемент sub_match соответствует всему совпадению, если выражение регулярного выражения содержало подвыражения, которые должны быть сопоставлены (т. е. группы с разделителями в скобках), их соответствующие подрежимы сохраняются как последовательные элементы sub_match в объекте match_results.
blockquote>код, который найдет несколько совпадений:
#include
#include #include using namespace std; int main() { string str("abcdefabcghiabc"); int i = 0; regex rgx1("abc"); smatch smtch; while (regex_search(str, smtch, rgx1)) { std::cout << i << ": " << smtch[0] << std::endl; i += 1; str = smtch.suffix().str(); } return 0; } См. IDEONE demo , возвращающий
abc
3 раза.Поскольку этот метод уничтожает входную строку, здесь другая альтернатива, основанная на
std::sregex_iterator
(std::wsregex_iterator
, должна использоваться, когда y наш объект является объектомstd::wstring
):int main() { std::regex r("ab(c)"); std::string s = "abcdefabcghiabc"; for(std::sregex_iterator i = std::sregex_iterator(s.begin(), s.end(), r); i != std::sregex_iterator(); ++i) { std::smatch m = *i; std::cout << "Match value: " << m.str() << " at Position " << m.position() << '\n'; std::cout << " Capture: " << m[1].str() << " at Position " << m.position(1) << '\n'; } return 0; }
См. демонстрацию IDEONE , возвращая
Match value: abc at Position 0 Capture: c at Position 2 Match value: abc at Position 6 Capture: c at Position 8 Match value: abc at Position 12 Capture: c at Position 14
Если Вы открываете файл DMP с редактором, который может обработать большие файлы, Вы могли бы быть в состоянии определить местоположение областей, где названия схемы упоминаются. Просто обязательно не измените что-либо. Было бы лучше при открытии копии исходного дампа.
Обновление (19.09.2008 10:05) - Решение:
Мое Решение: Социальная инженерия, я вырыл очень трудно и нашел кого-то, кто знал название схемы.
Техническое решение: Поиск .dmp файла сделал , приводят к названию схемы.
, Как только я знал название схемы, я искал файл дампа и изучил, где найти его.
Места, которые называют Схемы, были замечены в .dmp файле:
<OWNER_NAME>SOURCE_SCHEMA</OWNER_NAME>
Это было замечено перед каждым именем таблицы / определение.
SCHEMA_LIST 'SOURCE_SCHEMA'
Это было замечено около конца .dmp.
Интересно достаточно, вокруг эти SCHEMA_LIST 'SOURCE_SCHEMA'
раздел, этому также использовали командную строку для создания дампа, используемые каталоги, используемые файлы паритета, версия для Windows, на этом работали, и настройки сессии экспорта (язык, форматы даты).
Так, проблема решила:)
Предположение, что у Вас нет файла журнала от expdp задания, которое генерировало файл во-первых, самая легкая опция, должно будет, вероятно, использовать , параметр SQLFILE для имения impdp генерирует файл DDL (на основе полного импорта). Тогда можно захватить названия схемы из того файла. Не идеальный, конечно, так как impdp должен считать весь файл дампа, чтобы извлечь DDL и с другой стороны добраться до схемы, которой Вы интересуетесь, и необходимо сделать немного текстового файла, ищущего различные операторы CREATE USER, но это должно быть выполнимо.