Document Number | P0014R1 |
---|---|
Date | 2015-10-30 |
Audience | Library Working Group |
Reply-To |
|
std::regex in the C++ standard has an engine that recognizes the ECMAScript grammar. But unlike the original RegExp of ECMAScript, this engine does not have a way to switch the behaviors of the regular expressions ^ and $, because there is not any option corresponding to the multiline property in ECMAScript. To fix this incompatibility and to make the behavior of this engine more compatible with the original RegExp of ECMAScript, I propose adding an option to std::regex for switching the behaviors of the regular expressions ^ and $.
To syntax_option_type in 28.5.1 [re.synopt]:
constexpr syntax_option_type multiline = unspecified ;
To the end of the text in 28.5.1 [re.synopt]:
When one of grammars other than ECMAScript is specified, if the flag multiline is set, the value is not valid. [Note: With multiline, ^ matches the beginning of every line in addition to the beginning of the input sequence, and $ matches the end of every line in addition to the end of the input sequence. ―― end note]
To Table 138 in 28.5.1 [re.synopt]:
Element: multiline
Effect(s) if set: Specifies that ^ and $ shall behave according to the specification in ECMA-262 with the condition that Multiline
is true
, if the ECMAScript grammar is specified.
Into class basic_regex in 28.8 [re.regex]:
static constexpr regex_constants::syntax_option_type
multiline = regex_constants::multiline;
To basic_regex constants in 28.8.1 [re.regex.const]:
static constexpr regex_constants::syntax_option_type
multiline = regex_constants::multiline;
I reported this as a library issue once and it was listed as Issue #2503, but based on a recommendation I submit this matter as a proposal.