.net - .NET 正则表达式引擎是否支持内联模式修饰符?

标签 .net regex

我公司使用的一个 C# 应用程序从数据库表中获取正则表达式字符串,并将它们匹配到不同的文本文件中。问题是应用程序没有将 RegexOptions 设置为默认值,我需要使用“点匹配新行”模式。

引擎是否支持内联模式修饰符

"A(?s)(.*?)(?-s)B"

或“全局”模式修饰符,如 PHP
"/A(.*?)B/s"

最佳答案

除了 RegexOptions 编译器标志外,/s 没有直接的等效项。修饰符的样式,但您可以通过在正则表达式的最开头放置一个内联修饰符来获得相同的效果:

"(?s)A(.*?)B"

请注意,内联修饰符有两种形式。您在示例中使用的那个:
"A(?s)(.*?)(?-s)B"

...没有冒号。 (?s)只是一个打开 DOTALL 模式的开关,直到 (?-s)再次将其关闭。带有冒号的另一个版本实际上是一个非捕获组,(?:...) , 内置模式开关。模式开关仅在该组内的正则表达式部分处于控制状态时有效。使用该版本,您的示例将变为
"A(?s:.*?)B"

...或者,如果您仍想使用捕获组:
"A(?s:(.*?))B"

您不想混淆这两个版本。如果您要像这样编写原始正则表达式:
"A(?s:)(.*?)(?-s:)B"

...它不会抛出异常,但它不会按预期工作。 (?s:)在 DOTALL 模式下将不匹配任何内容,而 (?-s:)在 not-DOTALL 模式下会匹配更多的东西。

关于.net - .NET 正则表达式引擎是否支持内联模式修饰符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/713536/

相关文章:

php - 使用多个分隔符拆分字符串

html - 如何使用 RegExp 从嵌套的类似 HTML 的元素中检索值的集合?

javascript - if 语句在应用 match() 方法时找不到字符串

c# - 枚举类模式是否与 DI 不兼容?

c# - Kendo 网格、虚拟滚动、页面大小和聚合

c# - 文件扩展名中可以存在空格吗?

.net - 如何使用 "dotnet"工具构建 .sqlproj 项目?

regex - 如何通过JMeter从html页面中提取所有正则表达式匹配

.net - .NET 十进制到 SQL Server 十进制的良好映射是什么?

javascript - 如何使用正则表达式检查字符串是否包含带空格的逗号?