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 функция, чтобы получить все числа из этой строки, но я предполагаю, что вы собираетесь расширить ее еще больше, когда этот подход будет немного более структурированным.

Другие вопросы по тегам