例如,这个正则表达式
(.*)<FooBar>
将匹配:
abcde<FooBar>
但我如何让它在多行之间匹配呢?
abcde
fghij<FooBar>
例如,这个正则表达式
(.*)<FooBar>
将匹配:
abcde<FooBar>
但我如何让它在多行之间匹配呢?
abcde
fghij<FooBar>
当前回答
试试这个:
((.|\n)*)<FooBar>
它基本上是说“任何字符或换行符”重复0次或多次。
其他回答
在许多正则表达式方言中,/[\S\ S]*<Foobar>/将满足您的需要。源
解决方案:
使用模式修饰符sU将在PHP中获得所需的匹配。
例子:
preg_match('/(.*)/sU', $content, $match);
来源:
模式修饰符
([\ s \ s] *) < FooBar >
点匹配除换行符(\r\n)以外的所有字符。所以使用\s\ s,它将匹配所有字符。
在语言内部使用的上下文中,正则表达式作用于字符串,而不是行。因此,假设输入字符串有多行,您应该能够正常使用正则表达式。
在这种情况下,给定的正则表达式将匹配整个字符串,因为存在"<FooBar>"。根据regex实现的具体情况,$1值(从"(.*)"中获得)将是"fghij"或"abcde\nfghij"。正如其他人所说,一些实现允许您控制“.”是否匹配换行符,从而让您做出选择。
基于行的正则表达式通常用于命令行,例如egrep。
这取决于语言,但应该有一个可以添加到正则表达式模式的修饰符。在PHP中是:
/(.*)<FooBar>/s
结尾的s使点匹配所有字符,包括换行符。