例如,这个正则表达式
(.*)<FooBar>
将匹配:
abcde<FooBar>
但我如何让它在多行之间匹配呢?
abcde
fghij<FooBar>
例如,这个正则表达式
(.*)<FooBar>
将匹配:
abcde<FooBar>
但我如何让它在多行之间匹配呢?
abcde
fghij<FooBar>
当前回答
选项1
一种方法是使用s标志(就像接受的答案一样):
/(.*)<FooBar>/s
演示1
选项2
第二种方法是使用m (multiline)标志和以下任何模式:
/([\s\S]*)<FooBar>/m
or
/([\d\D]*)<FooBar>/m
or
/([\w\W]*)<FooBar>/m
演示2
RegEx电路
jex。Im可视化正则表达式:
其他回答
在语言内部使用的上下文中,正则表达式作用于字符串,而不是行。因此,假设输入字符串有多行,您应该能够正常使用正则表达式。
在这种情况下,给定的正则表达式将匹配整个字符串,因为存在"<FooBar>"。根据regex实现的具体情况,$1值(从"(.*)"中获得)将是"fghij"或"abcde\nfghij"。正如其他人所说,一些实现允许您控制“.”是否匹配换行符,从而让您做出选择。
基于行的正则表达式通常用于命令行,例如egrep。
在许多正则表达式方言中,/[\S\ S]*<Foobar>/将满足您的需要。源
在notepad++中你可以使用这个
<table (.|\r\n)*</table>
它将匹配从。开始的整个表
rows and columns你可以让它成为贪婪的,使用下面的方法,这样它就会匹配第一个,第二个等等表,而不是一次全部匹配
<table (.|\r\n)*?</table>
在基于java的正则表达式中,可以使用[\s\ s]。
解决方案:
使用模式修饰符sU将在PHP中获得所需的匹配。
例子:
preg_match('/(.*)/sU', $content, $match);
来源:
模式修饰符