正则表达式中的(?s)是什么意思?

28

我对正则表达式的领域非常陌生。最近,我在这个网站上搜索了适用于PowerShell的正则表达式,以便匹配HTML标签,然后我找到了以下内容。

$content -match '(?s)<table[^>]+width\s*=\s*"300px"\s*.*?>(.*?)</table>'

我一直在寻找所有正则表达式参考书和资料(Perl 和 Powershell)中关于 (?s) 的含义,但没有找到。它看起来像是一个条件,但缺少了 then 部分。

有人能指引我正确的方向吗?

谢谢

3个回答

27

根据正则表达式参考网站的说法:

在其余的正则表达式中打开“点匹配换行符”选项。(旧版的正则表达式可能会在整个正则表达式中打开此选项。)


1
哦,非常感谢。我的所有参考资料都只列出了(?i)用于区分大小写,虽然有些参考资料也提到了单行模式、多行模式和自由空格模式,但它们没有提到语法。 - Barry Chum
2
相关的正则表达式参考网页现在在这里:https://www.regular-expressions.info/refmodifiers.html。 - David

0

1
在正则表达式的开头加上(?s)会很有用,它会打开“单行模式”,例如正则表达式abc.def会匹配字符串"abcXdef",其中的"X"可以是除换行符以外的任意字符。而正则表达式(?s)abc.def会匹配"abcXdef",其中的"X"可以是任意字符,包括换行符。 - undefined

-1
"

"?意味着1或0个匹配。"?s"使点匹配换行符。句点通常是通配符,可匹配任何字符,但保存换行符。

"

必须有一个前导字符。在这种情况下,只有左括号 ( 在 ? 前面,至于句号,则我认为没有。 - yogibimbi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接