Le 24/02/2017 à 17:17, Kornel Benko a écrit :
Little net-search gives for example:
http://stackoverflow.com/questions/13526884/inconsistency-between-boostregex-and-stdregex
http://stackoverflow.com/questions/7589672/boost-regex-vs-c11-regex
http://stackoverflow.com/questions/26696250/difference-between-stdregex-match-stdregex-search

Citing from the first url:
        gcc of course doesn't support the tr1/c++11 regex, but to give a more 
general answer,
        boost.regex's default is perl 5, according to its documentation, while 
C++ default is
        ECMAScript, extended by several locale-dependent elements of POSIX BRE.

        Kornel


The first link points to this:
http://www.boost.org/doc/libs/1_52_0/libs/regex/doc/html/boost_regex/syntax/perl_syntax.html#boost_regex.syntax.perl_syntax.perl_extended_patterns
which explains that perl extended patterns start with ``(?''. So all we have to do is some grep and:

src/Buffer.cpp:// chktex should be run with these flags disabled: 3, 22, 25, 30, 38(?) src/LayoutFile.cpp: "(?:\\[([^,]*)(?:,.*)*\\])*\\s*\\{(.*)\\}\\s*"); src/frontends/qt4/GuiApplication.cpp: QRegExp re( "[=]*(?:([0-9]+)[xX]([0-9]+)){0,1}[ ]*(?:([+-][0-9]*)){0,1}(?:([+-][0-9]*)){0,1}" ); src/frontends/qt4/GuiDocument.cpp: // disable if there aren't any modules (?), if none of them is chosen src/frontends/qt4/GuiThesaurus.cpp: QRegExp re("^([^\\(\\)]+)\\b\\(?.*\\)?.*$"); src/frontends/qt4/GuiThesaurus.cpp: QRegExp rex("^(\\(.+\\))\\s*([^\\(\\)]+)\\s*\\(?.*\\)?.*$"); src/frontends/qt4/GuiThesaurus.cpp: QRegExp re("^([^\\(\\)]+)\\b\\(?.*\\)?.*$"); src/frontends/qt4/GuiThesaurus.cpp: QRegExp rex("^(\\(.+\\))\\s*([^\\(\\)]+)\\s*\\(?.*\\)?.*$");
src/frontends/qt4/GuiWorkArea.cpp:      // FIXME(?):
src/frontends/qt4/LaTeXHighlighter.cpp: QRegExp exprComment("(?:^|[^\\\\])(?:\\\\\\\\)*(%).*$"); src/insets/InsetTabular.cpp: // FIXME(?): do we need a second metrics call? src/lyxfind.cpp: escape_map.push_back(P("\\", "(?:\\\\|\\\\backslash)")); src/lyxfind.cpp: escape_map.push_back(P("~", "(?:\\\\textasciitilde|\\\\sim)")); src/lyxfind.cpp: escape_map.push_back(P("^", "(?:\\^|\\\\textasciicircum\\{\\}|\\\\mathcircumflex)")); src/lyxfind.cpp: escape_map.push_back(P("\\\\", "(?:\\\\\\\\|\\\\backslash|\\\\textbackslash\\{\\})")); src/lyxfind.cpp: escape_map.push_back(P("\\^", "(?:\\^|\\\\textasciicircum\\{\\}|\\\\mathcircumflex)"));

Of course, only the last ones in lyxfonc.cpp matter here. The others are interesting if only because I see now that we also use QRegex, which seems to accept perl extensions.

So for now, we need to understand what is this syntax and use the ECMAscript equivalent. AFAICS, the only for used is (?:, described as:

(?:pattern) lexically groups pattern, without generating an additional sub-expression.

I do not know how important this thing is. What would go wrong if we just removed the grouping?

JMarc

Reply via email to