如何在正则表达式中跨多行匹配任何字符?

如何在正则表达式中跨多行匹配任何字符?,
Warning: implode(): Invalid arguments passed in /data/phpspider/zhask/webroot/tpl/detail.html on line 45
,,例如,这个正则表达式 (.*)<FooBar> (*) 将匹配: abcde<FooBar> abcde 但是如何让它跨多行匹配呢 abcde fghij<FooBar> abcde fghij 在语言中使用的上下文中,正则表达式作用于字符串,而不是行。因此,假设输入字符串有多行,您应该能够正常使用正则表达式 在这种情况下,给定的正则表达式将匹配整个字符串,因为存在“”。根据regex实现的具体情况,$1值(从“(.*)”中获取)将为“fghij”或

例如,这个正则表达式

(.*)<FooBar>
(*)
将匹配:

abcde<FooBar>
abcde
但是如何让它跨多行匹配呢

abcde
fghij<FooBar>
abcde
fghij

在语言中使用的上下文中,正则表达式作用于字符串,而不是行。因此,假设输入字符串有多行,您应该能够正常使用正则表达式

在这种情况下,给定的正则表达式将匹配整个字符串,因为存在“”。根据regex实现的具体情况,$1值(从“(.*)”中获取)将为“fghij”或“abcde\nfghij”。正如其他人所说,一些实现允许您控制“.”是否与换行符匹配,从而为您提供选择


基于行的正则表达式通常用于命令行,如egrep。

在语言中使用的上下文中,正则表达式作用于字符串,而不是行。因此,假设输入字符串有多行,您应该能够正常使用正则表达式

在这种情况下,给定的正则表达式将匹配整个字符串,因为存在“”。根据regex实现的具体情况,$1值(从“(.*)”中获取)将为“fghij”或“abcde\nfghij”。正如其他人所说,一些实现允许您控制“.”是否与换行符匹配,从而为您提供选择


基于行的正则表达式通常用于命令行,如egrep。

这取决于语言,但应该有一个修饰符,可以添加到正则表达式模式中。在PHP中,它是:

/(.*)<FooBar>/s
/(.*)/s

结尾的s会使点匹配包括换行符在内的所有字符。

这取决于语言,但应该有一个修饰符,可以添加到正则表达式模式中。在PHP中,它是:

/(.*)<FooBar>/s
/(.*)/s
结尾的s会使点匹配所有字符,包括换行符。

尝试以下操作:

((.|\n)*)<FooBar>
((.|\n)*)
它基本上是说“任何字符或换行符”重复了零次或多次。

试试这个:

((.|\n)*)<FooBar>
((.|\n)*)
它基本上表示“任何字符或换行符”重复零次或多次。

通常不匹配换行符。大多数正则表达式引擎允许您添加
S
-标志(也称为
DOTALL
SINGLELINE
),以使
也匹配换行符。 如果失败,您可以执行类似于
[\S\S]
通常不匹配换行符的操作。大多数正则表达式引擎允许您添加
S
-标志(也称为
DOTALL
SINGLELINE
),以使
也匹配换行符。
如果失败,通常可以执行类似于
[\S\S]
的操作。不匹配换行符,因此请尝试
((.|\n)*)

。不匹配换行符,请尝试
((.\n)*)

/(.*)/s
s使点(.)与回车符匹配
s使点(.)与回车符匹配。请注意,
(.|\n)*
的效率可能低于(例如)
[\s\s]*
(如果您的语言的正则表达式支持这种转义)以及查找如何指定使其转义的修饰符。也匹配换行符。或者,您可以使用类似于
[[:space:][:^space:][]*

的POSIXy替代方法,注意
(.|\n)*
的效率可能低于(例如)
[\s\s]*
(如果您的语言的正则表达式支持此类转义)以及查找如何指定进行转义的修饰符。也匹配换行符。或者你也可以选择像
[[:space:[:^space:][]*

我也遇到过同样的问题,可能不是用最好的方法解决了,但效果很好。在进行真正比赛之前,我替换了所有换行符:

mystring= Regex.Replace(mystring, "\r\n", "")
我正在处理HTML,所以在这种情况下换行符对我来说并不重要


我尝试了上面的所有建议,但没有成功,我正在使用.Net 3.5供参考

我遇到了同样的问题,并用可能不是最好的方法解决了它,但它很有效。在进行真正比赛之前,我替换了所有换行符:

mystring= Regex.Replace(mystring, "\r\n", "")
我正在处理HTML,所以在这种情况下换行符对我来说并不重要


我尝试了上面的所有建议,但没有成功,我正在使用.Net 3.5供参考

使用RegexOptions.Singleline,它改变了的含义。包括换行符


Replace(content、searchText、replaceText、RegexOptions.Singleline)

使用RegexOptions.Singleline,它改变了的含义。包括换行符


Replace(content、searchText、replaceText、RegexOptions.Singleline)

我想匹配java中的特定if块

   ...
   ...
   if(isTrue){
       doAction();

   }
...
...
}
如果我使用regExp

if \(isTrue(.|\n)*}
它包括我使用的方法块的右括号

if \(!isTrue([^}.]|\n)*}

从通配符匹配中排除右大括号。

我想匹配java中的特定if块

   ...
   ...
   if(isTrue){
       doAction();

   }
...
...
}
如果我使用regExp

if \(isTrue(.|\n)*}
它包括我使用的方法块的右括号

if \(!isTrue([^}.]|\n)*}

要从通配符匹配中排除右大括号。

在许多正则表达式方言中,
/[\S\S]*/
将执行您想要的操作

在许多正则表达式方言中,
/[\S\S]*/
将满足您的需要

如果使用Eclipse搜索,可以启用“DOTALL”选项使“.”与任何字符(包括行分隔符)匹配:只需在搜索字符串的开头添加“(?s)”。例如:

(?s).*<FooBar>
(?s)*

如果使用Eclipse搜索,可以启用“DOTALL”选项使“.”与任何字符(包括行分隔符)匹配:只需在搜索字符串的开头添加“(?s)”。例如:

(?s).*<FooBar>
(?s)*
解决方案: 使用模式修改器sU将在PHP中获得所需的匹配

例子: 资料来源:

解决方案: 使用模式修改器sU将在PHP中获得所需的匹配

例子: 资料来源:

通常,我们必须修改一个子字符串,其中包含几个分布在整个lin中的关键字
(.*?\n)*?
(.*?|\n)*?
$file = get-content file.txt -raw

$pattern = 'lineone\r\nlinetwo\r\nlinethree\r\n'     # "windows" text
$pattern = 'lineone\nlinetwo\nlinethree\n'           # "unix" text
$pattern = 'lineone\r?\nlinetwo\r?\nlinethree\r?\n'  # both

$file -match $pattern

# output
True
$pattern = 'lineone
linetwo
linethree
'
'lineone
linetwo
linethree
' -replace "`r",'\r' -replace "`n",'\n'

# output
lineone\nlinetwo\nlinethree\n
/(.*)<FooBar>/s
/([\s\S]*)<FooBar>/m
/([\d\D]*)<FooBar>/m
/([\w\W]*)<FooBar>/m