Есть пара проблем с вашим регулярным выражением.
Первый бит: [Green|Red]
, который соответствует набору символов, этот набор равен G
, r
, e
, n
, |
, R
и d
.
вам нужно сделать это, используя скобки, например (Green|Red)
. теперь это соответствует либо строке Green
, либо Red
.
РЕДАКТИРОВАТЬ: если вы не хотите, чтобы это захватывало что-либо, вы можете использовать группу без захвата, что в boost :: regex выполняется путем включения ?:
после первой круглой скобки: (?:Green|Red)
. Теперь регулярное выражение имеет группирующее поведение круглых скобок, но нет захвата.
Вторая проблема (.*)
Это не так уж много, но слишком много, включая шаблоны, такие как последовательные пролеты. Это будет использовать конец одного промежутка и начало следующего, вплоть до последнего промежутка на странице. Вы должны сделать это не жадным. В boost :: regex вы делаете это, следуя *
с ?
. измените его на (.*?)
(и сделайте то же самое с другими *.
Дело в том, что XML и HTML очень сложно заставить работать что-то большее, чем просто простые регулярные выражения. Вы действительно должны использовать библиотеку, которая предназначена для работы с этим форматом. Существует множество вариантов . Таким образом, вы можете быть уверены, что обрабатываете HTML правильно, независимо от того, насколько искаженным может быть ввод.