如何在正则表达式中跨多行匹配任何字符?
例如,这个正则表达式如何在正则表达式中跨多行匹配任何字符?,
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