与 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]*|(?<=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++ 函数与在控制台应用程序中运行的相同代码产生不同的结果?