Boost Regex неизвестное число вар
У меня проблема с выражением регулярного выражения, и мне нужна помощь. У меня есть некоторые выражения, подобные этим в mein.txt файле:
19 = NAND (1, 19)
выражение регулярного выражения: http://rubular.com/r/U8rO09bvTO
С помощью этого регулярного выражения я получил отдельные совпадения для чисел. Но теперь мне нужно выражение регулярного выражения с неизвестным количеством чисел в скобках.
Например:
19 = NAND (1, 23, 13, 24)
матч1: 19, матч2: 1, матч3: 23, матч4: 13, матч5: 24
Я не знаю количество номеров. Поэтому мне нужно главное выражение для min 2 числа в скобках до неизвестного числа.
Кстати, я использую с ++. @ Martjin Ваше первое выражение регулярного выражения сработало очень хорошо, спасибо. Вот мой код:
boost::cmatch result;
boost::regex matchNand ("([0-9]*) = NAND\\((.*?)\\)");
boost::regex matchNumb ("(\\d+)");
string cstring = "19 = NAND (1, 23, 13, 24)";
boost::regex_search(cstring.c_str(), result, matchNand);
cout << "NAND: " << result[1] << "=" << result[2] << endl;
string str = result[2];
boost::regex_search(str.c_str(), result, matchNumb);
cout << "NUM: " << result[1] << "," << result[2]<< "," << result[3] << "," << result[4] << endl;
Мой вывод: NAND: 19=1, 23, 13, 24 NUM: 1,,,
Поэтому моя новая проблема - я нахожу только первый номер. Результат также полностью противоположен этому решению: http://rubular.com/r/nqXDSuBXjc
1 ответ
Простой (и, возможно, более понятный, чем одно регулярное выражение) состоит в том, чтобы разделить это на два регулярных выражения.
Сначала запустите регулярное выражение, которое отделяет ваш результат от ваших аргументов: http://rubular.com/r/YkGdkkg4y3
([0-9]*) = NAND \((.*?)\)
Затем выполните регулярное выражение, которое будет соответствовать всем числам в вашем аргументе: http://rubular.com/r/2vpSbZvz12
\d+
Предполагая, что вы используете Ruby, вы можете выполнить регулярное выражение, которое несколько раз соответствует функции scan
как объяснено здесь: http://ruby-doc.org/core-1.9.3/String.html
Конечно, вы можете просто использовать второе регулярное выражение с scan
функция, чтобы получить все числа из этой строки, но я предполагаю, что вы собираетесь расширить ее еще больше, когда этот подход будет немного более структурированным.