Регулярные выражения часто можно использовать для разбора строк. Используйте capture groups
(круглые скобки), чтобы получить различные части анализируемой строки.
Например, для разбора выражения типа foo: [3 4 56]
используйте регулярное выражение (.*): \[(\d+) (\d+) (\d+)\]
. Первая группа захвата будет содержать «foo», вторая, третья и четвертая будут содержать цифры 3, 4 и 56.
Если существует несколько возможных форматов строк, которые необходимо проанализировать, как в примере, приведенном OP, либо примените отдельные регулярные выражения одно за другим и посмотрите, какой из них соответствует, или напишите регулярное выражение, которое соответствует всем возможным вариантам обычно с использованием оператора |
(set union).
Регулярные выражения очень гибкие, поэтому выражение можно расширить, чтобы разрешить больше вариаций, например, произвольное количество пробелов и других пробелов после :
в примере. Или только для того, чтобы числа содержали определенное количество цифр.
В качестве дополнительного бонуса регулярные выражения обеспечивают неявную проверку, поскольку они требуют идеального соответствия. Например, если номер 56
в приведенном выше примере был заменен на 56x
, сопоставление не будет выполнено. Это также может упростить код, так как в приведенном выше примере группы, содержащие числа, могут быть безопасно преобразованы в целые числа без какой-либо дополнительной проверки после успешного сопоставления.
Регулярные выражения обычно работают с хорошей производительностью, и есть много хороших библиотек на выбор. Например, Boost.Regex .