我在Powershell中关注了Regex:
[regex]$regex =
@'
(?ms).*?<DIV class=row>.*?
'@
Run Code Online (Sandbox Code Playgroud)
(?ms)在这里是什么意思.
Tut*_*man 17
(?m)
是多行模式的修饰符.它使^
与$
匹配,而不是输入的开始和结束相匹配的线,分别的开始和结束.
例如,给定输入:
ABC DEF
GHI
正则表达式^[A-Z]{3}
将匹配:
"ABC"
同时,正则表达式(?m)^[A-Z]{3}
将匹配:
"ABC"
"GHI"
(?s)
是单行模式的修饰符.它会将换行符和换行符添加到.
匹配的字符列表中.
给定与之前相同的输入,正则表达式[A-Z]{3}.
将匹配(注意包含空格字符):
"ABC "
虽然正则表达式(?s)[A-Z]{3}.
将匹配:
"ABC "
"DEF\n"
尽管他们的名字,这两种模式不一定是相互排斥的.在一些实施方式中,它们取消,但是,在大多数情况下,它们可以一起使用.您可以通过书写(?m)(?s)
或以较短的形式同时使用两者(?ms)
.
编辑:
在某些情况下您可能想要使用(?ms)
.以下示例有点人为,但我认为它们符合我们的目的.给定输入(注意"ABC"之后的空格):
ABC
DEF
GHI
正则表达式(?ms)^[A-Z]{3}.
匹配:
"ABC "
"DEF\n"
虽然两者(?m)^[A-Z]{3}.
并(?s)^[A-Z]{3}.
匹配:
"ABC "
小智 6
有时人们说(?s)
是单线模式.它没有,没有这样的事情.
这意味着Dot meta-char .
匹配任何换行符,这意味着Dot匹配任何字符.
默认的通常是点确实不匹配换行符,所以你必须明确
通过正则表达式选项不变,或在线修改设定点,所有修改(?s)
.
(?m)
是多行修饰符.它允许锚点^$
匹配行的开头/结尾,
以及字符串的开头/结尾.
如何/何时/应该 (?ms)
一起使用?
答案是,有时你想使用Dot来跨越换行符,同时
需要^
在行首开始匹配.你不确定中间的任何事情.
例:
(?ms)^BlockStart.*?BlockEnd
输入的位置是:
StringStart aasdfasdffasdf
asgasgasgw fasfggasfgaag
BlockStart asgdfasggafsdgadsfg
aaaasfgaafdsgasfg
afbaadsf afdsgadsfg BlockEnd
afsbgafsdgasfg
aaaaaafrgasfgaadsfgg
归档时间: |
|
查看次数: |
4934 次 |
最近记录: |