я делаю регулярное выражение, которое пытается соответствовать следующей строке:Regex матч между двумя строками, которые могут содержать другую строку
.\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 не может t быть лучшим способом решения проблемы X. Что такое проблема X? – Nzall
@NateKerkhofs Это может быть самый запутанный комментарий, который я прочитал на SO. Я не понимаю, как вопрос непонятен сам по себе. –
Вопрос совершенно понятен сам по себе, это правда. Я говорю о http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem. Ваше Regex пытается решить проблему, которая нам неизвестна. Однако ваше Regex может не быть лучшим решением проблемы. Меня интересует, что проблема в том, что вы пытаетесь решить, используя Regex, в случае, если есть лучшее решение для решения проблемы, чем Regex. – Nzall