gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 00:43:44 26 4
gpt4 key购买 nike

我公司使用的一个 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com