gpt4 book ai didi

c# - 以前工作的 REGEX 匹配现在失败

转载 作者:太空狗 更新时间:2023-10-30 01:06:29 25 4
gpt4 key购买 nike

作为在构建脚本中清理配置文件的一部分,我们有这样的东西:

Regex.IsMatch(LongStringOfFilecontents, @"Password=""[0-9a-zA-Z]*""")

Regex.IsMatch(LongStringOfFilecontents, @"Password2=""[0-9a-zA-Z]*""")

找到匹配项后,将在应用发布前将密码替换为虚拟值。

问题是它现在找到“Password”但找不到“Password2”或“Password1”。

此 C# .NET 3.5 代码已使用数年,已运行数百次且未更改。就在几天前,它运行成功。截至今天早上,它因“Password2”而窒息。配置文件确实同时包含 Password="some arbitrary value"和 Password2="some arbitrary value"。

我怀疑“d2”可能被视为一种模式,但它不在 {} 内,而且如前所述,它已经正确运行了好几年。

我已经针对可能的超时进行了测试,这似乎不是问题所在。我已经尝试了 CaseInsensitive 选项,无论如何这应该无关紧要([a-zA-Z],对吧?)而且也没有效果。

它在两台不同的(Win 7 Professional,64 位,SP1)机器上失败,但在 XP 机器(SP 3)上按预期工作。

除非这是今天早上的 Windows 7 自动更新的结果,否则我感到很困惑。

这里是完整的上下文:

ReplaceInFile(filename, @"Password1=""[0-9a-zA-Z]*""", @"Password1=""REPLACE_ME""");


private static bool ReplaceInFile(string filename, string regexp, string replacement)
{
try
{
if (File.Exists(filename))
{
string oldContents = null;
using (StreamReader reader = new StreamReader(filename, true))
{
oldContents = reader.ReadToEnd();
}
if (Regex.IsMatch(oldContents, regexp))
{
string newContents = Regex.Replace(oldContents, regexp, replacement);
if (oldContents != newContents)
{
File.WriteAllText(filename, newContents);
return true;
}
}
else
{
BuildFailed("DID NOT FIND " + regexp + " in " + filename + " Case-SeNsiTive?");
}
}
return false;
}
catch (Exception ex)
{
BuildFailed(ex.Message);
return false;
}
}

这是正在检查的大文件的一小部分:

<Kirk Enabled="1" Type="8000" Password1="test_pwd" Password2="dev_pwd" UserName1="admin" UserName2="GW-DECT/admin" DutyCycle="1" TcpPort="10000" ServerIP="localhost" />

最佳答案

我认为您的问题更有可能是密码的内容与 [0-9a-zA-Z] 不匹配,而不是任何与 Password= 匹配的内容或 Password2= 部分。该密码中很可能包含非字母数字字符。

关于c# - 以前工作的 REGEX 匹配现在失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15418186/

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