【发布时间】:2014-08-29 10:57:05
【问题描述】:
我正在做一个正则表达式,它试图匹配以下字符串:
.\SQL2012
来自两个字符串(它们包含在另一个更大的字符串中,但在这种情况下无关紧要):
/SERVER "\".\SQL2012\""
/SERVER .\SQL2012
所以在某些情况下,匹配前的"\" 和匹配后的\"" 都可以省略。我想出的正则表达式(来自 StackOverflow 上的上一个问题)如下:
(?<=\/SERVER\s*(?:[""\\""]+)?)\w+(?=(?:[\\""""]+|$)| )
如果我尝试匹配 TEST_SERVER 而不是 .\SQL2012(因为 \w 不匹配特殊字符),则效果很好。有没有办法匹配任何东西,直到\"" 或出现空格?
我在 C# 中执行此操作,这是我的代码:
string input = "/SERVER \"\\\".\\SQL2012\\\"\"";
string pattern = @"(?<=\/SERVER\s*(?:[""\\""]+)?)\w+(?=(?:[\\""""]+|$)| )";
Regex regEx = new Regex(pattern);
MatchCollection matches = regEx.Matches(input);
foreach (Match match in matches)
{
Console.WriteLine(match.ToString());
}
Console.ReadKey();
【问题讨论】:
-
这有 X/Y 问题的味道:你有问题 X,你认为你可以用解决方案 Y 解决它,你在解决方案 Y 中发现问题,现在你正在寻求解决问题的方法在解决方案 Y 中,而解决方案 Y 可能不是解决问题 X 的最佳方法。问题 X 是什么?
-
@NateKerkhofs 这可能是我读过的关于 SO 的最令人费解的评论。我不明白这个问题本身是如何无法理解的。
-
这个问题本身是完全可以理解的,这是真的。我说的是meta.stackexchange.com/questions/66377/what-is-the-xy-problem。您的正则表达式试图解决我们不知道的问题。但是,您的正则表达式可能不是该问题的最佳解决方案。我感兴趣的是您尝试使用正则表达式解决的问题是什么,以防有比正则表达式更好的解决方案来解决问题。
-
当你试图对我的问题进行所有元分析时,Avinash 设法回答了它。
-
你明白我为什么要回答你的问题吗?正则表达式可能不是您实际问题的最佳解决方案。您使用 Regex 解决的问题可能有更好的解决方案。我只是想帮忙。除了您试图在曾经是另一个字符串的一部分的字符串中查找“.\SQL2012”之外,我们没有上下文。我们不知道您为什么要尝试找到它或为什么要使用该方法。检查您之前的问题,您似乎正在尝试从字符串中提取服务器名称。那是配置字符串吗?