Namespaces
Variants
Views
Actions

Difference between revisions of "Talk:cpp/regex/ecmascript"

From cppreference.com
(Problem with example on default compiler gcc 9.2)
(responded)
 
Line 25: Line 25:
  
 
[[Special:Contributions/73.252.173.18|73.252.173.18]] 23:40, 20 December 2019 (PST)
 
[[Special:Contributions/73.252.173.18|73.252.173.18]] 23:40, 20 December 2019 (PST)
 +
 +
: I added a note to that effect in the example code. The gcc bug is apparently known (see [https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85472 here]).
 +
: The unfortunate part is it's what boost::regex, PCRE, Python, Go, etc. all do - but then they all try to conform to Perl syntax, not ECMA-262.
 +
: [[User:Hadriel|Hadriel]] ([[User talk:Hadriel|talk]]) 14:08, 21 December 2019 (PST)

Latest revision as of 14:08, 21 December 2019

[edit] Usefulness

Currently we're already linking to the ECMAScript spec from cpp/regex/syntax_option_type (granted, that could use being more visible). I believe pages on each supported regex syntax could be useful if they

  • correct and complete (as written, this page is incomplete: it's missing all the locale-sensitive classes supported by C++ in ECMAScript mode)
  • have small examples or at least prose to illustrate and explain different grammar (otherwise it's no better than following a link to the standard)

--Cubbi (talk) 08:42, 21 October 2013 (PDT)

PS: I suspect that this page, as written, was strongly influenced by http://www.cplusplus.com/reference/regex/ECMAScript/ or whatever its author used as the source -- it follows exact same layout for the part it covers. It would look better if this wiki followed either the standard or boost.regex, or something of its own --Cubbi (talk) 11:29, 21 October 2013 (PDT)

I agree, in its current form the page is not much useful. However, there's indeed not much to lose if we have a well documented and consistent documentation of all supported syntaxes. --P12 04:53, 23 October 2013 (PDT)

[edit] Example

This example:

show_matches("zaacbbbcac", "(z)((a+)?(b+)?(c))*");

Is currently confusing because the default compiler gcc 9.2 gets the wrong answer:

input=[zaacbbbcac], regex=[(z)((a+)?(b+)?(c))*]: prefix=[]  m[0]=[zaacbbbcac]  m[1]=[z]  m[2]=[ac]  m[3]=[a]  m[4]=[bbb]  m[5]=[c] suffix=[]

Clang 5.0 produces the correct answer:

input=[zaacbbbcac], regex=[(z)((a+)?(b+)?(c))*]: prefix=[]  m[0]=[zaacbbbcac]  m[1]=[z]  m[2]=[ac]  m[3]=[a]  m[4]=[]  m[5]=[c] suffix=[]

(cf. m[4])

73.252.173.18 23:40, 20 December 2019 (PST)

I added a note to that effect in the example code. The gcc bug is apparently known (see here).
The unfortunate part is it's what boost::regex, PCRE, Python, Go, etc. all do - but then they all try to conform to Perl syntax, not ECMA-262.
Hadriel (talk) 14:08, 21 December 2019 (PST)