如何匹配c ++正则表达式中的换行符?

时间:2015-11-15 09:55:43

标签: c++ regex

我尝试了以下正则表达式:

WindowEraser listener = new prog9().new WindowEraser();

DEMO

我预计正则表达式将完全正确,并且将找到该组。但事实并非如此。为什么?如何匹配c ++正则表达式中的换行符?在Java中它工作正常。

3 个答案:

答案 0 :(得分:5)

dot in regex通常匹配换行符std::ECMAScript syntax以外的任何字符。

  除了行终止符(LF,CR,LS,PS)之外,

.不是换行符。

0s7fg9078dfg09d78fg097dsfg7sdg\r\nfdfgdfg
[a-zA-Z0-9]+ matches until \r ↑___↑ .* would match from here

在许多正则表达式中,有一个 dotall 标志可用于使点也匹配换行符。

如果没有,有不同语言的解决方法,例如[^] ,而不是[\S\s]任何空格或非空白在一个类中产生任何字符,包括\n

regex_string = "([a-zA-Z0-9]+)[\\S\\s]*";

或使用可选的换行符:([a-zA-Z0-9]+).*(?:\\r?\\n.*)*([a-zA-Z0-9]+)(?:.|\\r?\\n)*

See your updated demo

答案 1 :(得分:2)

您可以尝试const static char * regex_string = "((.|\r\n)*)"; 我希望它会对你有所帮助。

答案 2 :(得分:1)

我正在使用CTest和PROPERTIES PASS_REGULAR_EXPRESSION。

[\ S \ s] *不起作用,但是(。| \ r | \ n)*起作用。

此正则表达式:

Function registered for ID 2 was called(.|\r|\n)*PASS

比赛:

Running test function: RegisterThreeDiffItemsTest04
ID 2 registered for callback
ID 4 registered for callback
ID 11 registered for callback
Function registered for ID 2 was called
ID 2 callback deregistered
ID 4 callback deregistered
ID 11 callback deregistered
Setup: PASS

注意:CMakeLists.txt需要转义反斜杠:

SET (ANDPASS "(.|\\r|\\n)*PASS")