例如,这个正则表达式
(.*)<FooBar>
将匹配:
abcde<FooBar>
但我如何让它在多行之间匹配呢?
abcde
fghij<FooBar>
例如,这个正则表达式
(.*)<FooBar>
将匹配:
abcde<FooBar>
但我如何让它在多行之间匹配呢?
abcde
fghij<FooBar>
当前回答
在许多正则表达式方言中,/[\S\ S]*<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可视化正则表达式:
这对我来说是最简单的方法:
(\X*)<FooBar>
在Ruby中,你可以使用'm'选项(多行):
/YOUR_REGEXP/m
有关更多信息,请参阅ruby-doc.org上的Regexp文档。
在语言内部使用的上下文中,正则表达式作用于字符串,而不是行。因此,假设输入字符串有多行,您应该能够正常使用正则表达式。
在这种情况下,给定的正则表达式将匹配整个字符串,因为存在"<FooBar>"。根据regex实现的具体情况,$1值(从"(.*)"中获得)将是"fghij"或"abcde\nfghij"。正如其他人所说,一些实现允许您控制“.”是否匹配换行符,从而让您做出选择。
基于行的正则表达式通常用于命令行,例如egrep。
我也遇到过同样的问题,我解决的方法可能不是最好的,但确实有效。在我做真正的比赛之前,我替换了所有换行符:
mystring = Regex.Replace(mystring, "\r\n", "")
我在操作HTML,所以在这种情况下换行对我来说并不重要。
我尝试了上面所有的建议,但都没有成功。我使用的是。net 3.5供你参考。