我在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 BlockEndafsbgafsdgasfg
aaaaaafrgasfgaadsfgg
| 归档时间: |
|
| 查看次数: |
4934 次 |
| 最近记录: |