当 regex101 匹配时,RegEx C# 不匹配
Posted
技术标签:
【中文标题】当 regex101 匹配时,RegEx C# 不匹配【英文标题】:RegEx C# doesnt Match when regex101 does 【发布时间】:2018-08-12 20:43:50 【问题描述】:这是我的模式:
-8\s+((?:[0-9]2\/[0-9]2\/[0-9]2)\s+(?:[0-9]2:[0-9]2:[0-9]2))\s+(?:LINE)\s+=\s+([0-9]0,9)\s+(?:STN)\s+=\s+([0-9]0,9)[ ]*(?:\n[ \S]*)*INCOMING CALL(?:[\S\s][^-])*
这是我的字符串:
-------- 02/16/18 13:50:39 LINE = 0248 STN = 629
CALLING NUMBER 252
NAME Mar Ant
UNKNOWN
DNIS NUMBER 255
BC = SPEECH
VOIP CALL
00:00:00 INCOMING CALL RINGING 0:09
LINE = 0004
00:00:25 CALL RELEASED
它确实与几个在线正则表达式测试器匹配,但与 http://regexstorm.net/tester 等 C# 测试器不匹配,因为
.NET 不使用 Posix 语法
我注意到如果我删除了模式的最后一部分
INCOMING CALL(?:[\S\s][^-])*
它确实匹配,但仍然不正确,或者至少不是我所期望的。
我应该改变什么来使这个模式匹配字符串?
【问题讨论】:
我的字符串末尾有一个新行 (\n),我显然看不到。通过在验证之前修剪输入来解决它。 【参考方案1】:该问题与模式类型无关,该模式实际上不符合 POSIX,因为正则表达式转义不能在括号表达式中使用(请参阅您的模式中的[\S\s]
,可以写成.
和@987654324 @ 选项,或 (?s:.)
)。
您只需将\n
替换为\r?\n
或(?:\r\n?|\n)
以匹配Windows 换行样式。
使用
-8\s+((?:[0-9]2/[0-9]2/[0-9]2)\s+(?:[0-9]2:[0-9]2:[0-9]2))\s+(?:LINE)\s+=\s+([0-9]0,9)\s+(?:STN)\s+=\s+([0-9]0,9)[ ]*(?:\r?\n[ \S]*)*INCOMING CALL(?:[\S\s][^-])*
见this regex demo。
【讨论】:
以上是关于当 regex101 匹配时,RegEx C# 不匹配的主要内容,如果未能解决你的问题,请参考以下文章