Есть ли в регулярных выражениях C ++ 11 match_partial? - PullRequest
7 голосов
/ 08 октября 2011

Прочитал n1429 с разделом

Алгоритмы regex_match и regex_search поддерживают функцию, не часто встречающуюся в библиотеках регулярных выражений: частичное совпадение . Когда флаг std::regex_constants::match_partial установлен в флагах, передаваемых алгоритму, тогда может быть возвращен результат true, если были сопоставлены один или несколько символов, и конечный автомат затем достиг конца последовательности символов в то время как были еще состояния, которые должны быть сопоставлены [...]

Но я не могу найти никаких следов этой функции ни в FCD, ни в заголовках текущей версии gcc-4.7.0. Я тоже искал ревизию n1429 но опять ничего не нашел. Я знаю, что основа для предложения произошла от Boost и превратилась в TR1. Но я не знаю, когда match_partial исчез.

Является ли функция частичного совпадения все еще в C ++ 11? Может с другим именем?

1 Ответ

7 голосов
/ 08 октября 2011

Кажется, флаг match_partial удален в N1723 "Предлагаемые решения для проблем с TR библиотеки" (октябрь 2004 г.) в качестве разрешения N1507 " Поправки к предложению регулярного выражения ":

7.34 Значение флага match_partial

Удалить match_partial.

Обоснование согласно N1837 "Технический отчет по расширению библиотеки List Список проблем" таково:

LWG согласна с тем, что это полезная и реализуемая функция, но мы неоднократно пытались и не смог дать ему адекватную спецификацию. Мы надеемся, что можно будет добавить эту функцию в будущей версии.

Я думаю, в C ++ 11 нет замены. Вы все еще можете использовать Boost.Regex (откуда взято std::regex), который поддерживает частичное совпадение .

...