我尝试了以下正则表达式:
WindowEraser listener = new prog9().new WindowEraser();
我预计正则表达式将完全正确,并且将找到该组。但事实并非如此。为什么?如何匹配c ++正则表达式中的换行符?在Java中它工作正常。
答案 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)*
答案 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")