Regex - как соответствовать всему кроме конкретного шаблона

Чтобы изменить Struct на месте, используйте hana::accessors , который предоставляет кортеж из hana::pair с ключом и функцией доступа. Кроме того, поскольку у нас пока нет отражения, вам нужно использовать один из макросов, таких как BOOST_HANA_ADAPT_STRUCT , чтобы реализовать A как hana::Struct.

Другой ответ обращается к лямбде принимает значение r, потому что сжатый кортеж является временным объектом.

#include 
#include 
namespace hana = boost::hana;
using namespace hana::literals;

#include 

struct A
{
  int integer;
  std::string string;
};
BOOST_HANA_ADAPT_STRUCT(A, integer, string);

int main()
{
  auto tuple = hana::make_tuple(42, "42");
  A a;
  hana::for_each(
    hana::zip(hana::accessors(), tuple),
    [&a](auto&& element) {
      auto accessor_pair = hana::at_c<0>(element);
      auto get_member = hana::second(accessor_pair);
      get_member(a) = hana::at_c<1>(element);
    });

  assert(a.integer == 42 && a.string == "42");
}

169
задан Alan Moore 20 July 2016 в 01:16
поделиться

5 ответов

Вы могли использовать предварительное утверждение:

(?!999)\d{3}

Этот пример соответствует трем цифрам кроме 999.

<час>

, Но если у Вас, оказывается, не есть реализация регулярного выражения с этой функцией (см. Сравнение Разновидностей Регулярного выражения ), вероятно, необходимо создать регулярное выражение с основными характеристиками самостоятельно.

А совместимое регулярное выражение с базовым синтаксисом только было бы:

[0-8]\d\d|\d[0-8]\d|\d\d[0-8]

Это действительно также соответствует любым трем последовательностям цифр, которые не являются 999.

191
ответ дан Pro Backup 23 November 2019 в 20:52
поделиться

Соответствие против шаблона и использования базовый язык для инвертирования булева результата соответствия. Это будет намного более четким и удобным в сопровождении.

15
ответ дан Ben S 23 November 2019 в 20:52
поделиться

Дополнение регулярного языка является также регулярным языком, но создать его необходимо создать DFA для регулярного языка и внести любое допустимое изменение состояния в ошибку. См. это для примера. То, что не говорит страница, - то, что она преобразовала /(ac|bd)/ в /(a[^c]?|b[^d]?|[^ab])/. Преобразование из DFA назад к регулярному выражению не тривиально. Легче, если можно использовать неизменное регулярное выражение и изменить семантику в коде, как предложенный прежде.

4
ответ дан Radu 23 November 2019 в 20:52
поделиться
(B)|(A)

тогда использование, что получает группа 2...

0
ответ дан bobble bubble 23 November 2019 в 20:52
поделиться

шаблон - ре

str.split(/re/g) 

возвратит все кроме шаблона.

Тест здесь

1
ответ дан unigogo 23 November 2019 в 20:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: