与 C# 控制台应用程序中的相同代码相比,Regex.Match 在 Unity 中返回不同/错误的结果

Posted

技术标签:

【中文标题】与 C# 控制台应用程序中的相同代码相比,Regex.Match 在 Unity 中返回不同/错误的结果【英文标题】:Regex.Match returns different/wrong result in Unity compared to same exact code in a C# console app 【发布时间】:2021-05-27 08:13:28 【问题描述】:

我正在尝试使用正则表达式模式在 Unity 中匹配字符串。我已经在一个示例项目中编写了整个代码,它运行得非常好。

tokens[line] = Regex.Matches(instructionLines[line], "^\\w*|(?<=q\\[)\\d*(?=\\]))";

我已通过regex101 验证它符合我的需要。

然后我在控制台中打印了结果,这也是正确的。

Console App:
 h 0
 h 1
 h 2
 h 3
 cx 1 2
 t 1

最后,我将代码复制粘贴到 Unity 中 - 它与示例项目中的行的第一个单词不匹配。

Unity Console:
 0
 1
 2
 3
 1 2
 1

我没有更改任何内容,导入是相同的(使用 System.Text.RegularExpressions;)并且正则表达式是正确的。为什么 Unity 会这样做,我该如何解决这种不正确的行为?

【问题讨论】:

尝试添加多行(?m)^[a-z]*|(?&lt;=q\[)\d*(?=\]) 成功了,非常感谢!请随时回答问题。 是的@Thefourthbird,请将此作为答案,也许可以解释一下它是如何解决问题的 @makssyz 您可能想了解 .NET 提供的所有正则表达式选项:Regular Expression Options。 @makssyz 在您添加到问题regex101.com/r/FzpZXq/1 的链接中,您可以在右上角看到m 多行标志。由于您的模式使用锚点^,因此您必须启用多行,这也可以使用内联修饰符(?m) 来完成,请参阅regular-expressions.info/anchors.html 【参考方案1】:

感谢@Thefourthbird 解决了这个问题,引用 cmets 的话:

尝试添加多行 (?m)^[a-z]|(?(?=])

在您添加到问题 regex101.com/r/FzpZXq/1 的链接中,您可以 在右上角看到多行有一个 m 标志。身为你的 模式使用锚 ^ 你必须启用多行,这也可以 使用内联修饰符 (?m) 完成,请参见 正则表达式.info/anchors.html

【讨论】:

以上是关于与 C# 控制台应用程序中的相同代码相比,Regex.Match 在 Unity 中返回不同/错误的结果的主要内容,如果未能解决你的问题,请参考以下文章

是啥导致在单元测试(NUnit 或 MSTest)中从 C# 调用的 C++ 函数与在控制台应用程序中运行的相同代码产生不同的结果?

C# OPC 应用程序代码相同,但工作方式不同

第一个C#程序

main() 函数与 C 中的其他函数相比如何?

与 SSMS 相比,实体框架中的查询时间极慢

C# PowerShell 无法仅在 Web 应用程序中连接到 AzureAD