正则表达式在其中存在换行符时无法与文本匹配

时间:2017-04-26 18:55:17

标签: regex

我正在尝试基于正则表达式提取字符串,但是当字符串中存在新行时...正则表达式无法处理

正则表达式 -

^Test\s[0-9]-[0-9]:.+?(?=\.)

表达式很简单,它匹配任何以Test开头的字符串,后跟空格和数字数字,后跟任何文本,直到。

这会找到如下所示的短信

Test 1-8: This is first test.
Test 9-8: This is second test and is OK.
Test 5-1:This is Test 1,3 three.

但是当下面有一个带换行符的文本时,正则表达式上方不起作用。

Test 9-8: This is second test 
and is OK.

我应该如何在正则表达式中处理这个问题?

2 个答案:

答案 0 :(得分:1)

.(在.+?(?=\.)中使用)与非POSIX正则表达式引擎中的换行符不匹配(精确的字符在正则表达式库中不同)。

在此处使用否定字符类[^.]+

^Test\s[0-9]-[0-9]:[^.]+

请参阅regex demo

[^.]+匹配除文字点以外的任何1个或多个字符(包括换行符)。

答案 1 :(得分:1)

要匹配“任何字符,包括换行符”,您可以使用以下内容:[\s\S],表示“任何空白字符和任何非空格字符”......如此有效:一切。

或者你可以使用's'标志:/^Test\s[0-9]-[0-9]:.+?(?=\.)/s。这还将包括点的换行符。

@ wiktor-stribiżew提供的解决方案效率更高,所以我建议使用那个。