Чтобы сопоставить все до, но не включая, /?
:
.*(?=/\?)
Если вы не уверены в возможности побега, вы можете использовать класс символов, чтобы выполнить побег за вас: [ 114]
.*(?=/[?])
Я предполагаю, что "корректно закрывается, приложение" является частью, с которой Вы боретесь здесь. Иначе Ваше приложение автоматически выйдет на ctrl-c. Необходимо изменить заголовок.
Вот быстрая демонстрация того, что я думаю, что Вам нужно. Это могло быть усовершенствовано немного больше с использованием блокировки и Мониторов для уведомления. Я не уверен точно, в чем Вы нуждаетесь, хотя, таким образом, я просто изложу это...
class Program
{
private static volatile bool _s_stop = false;
public static void Main(string[] args)
{
Console.CancelKeyPress += new ConsoleCancelEventHandler(Console_CancelKeyPress);
while (!_s_stop)
{
/* put real logic here */
Console.WriteLine("still running at {0}", DateTime.Now);
Thread.Sleep(3000);
}
Console.WriteLine("Graceful shut down code here...");
//don't leave this... demonstration purposes only...
Console.ReadLine();
}
static void Console_CancelKeyPress(object sender, ConsoleCancelEventArgs e)
{
//you have 2 options here, leave e.Cancel set to false and just handle any
//graceful shutdown that you can while in here, or set a flag to notify the other
//thread at the next check that it's to shut down. I'll do the 2nd option
e.Cancel = true;
_s_stop = true;
Console.WriteLine("CancelKeyPress fired...");
}
}
_s_stop булевская переменная должна быть объявлена энергозависимая, или чрезмерно амбициозный оптимизатор мог бы заставить программу циклично выполняться бесконечно.
Это может быть тем, что Вы ищете:
http://msdn.microsoft.com/en-us/library/system.console.cancelkeypress.aspx
Уже существует обработчик, связанный с CancelKeyPress, который завершает Ваше приложение, единственная причина сцепиться с ним состоит в том, если Вы хотите прервать событие и препятствовать тому, чтобы приложение закрылось.
В Вашей ситуации, просто помещает Ваше приложение в бесконечный цикл и позволяют созданному в обработчике событий уничтожить его. Можно хотеть изучить использование, чему-то нравится, Ожидают (1) или фоновый процесс, чтобы препятствовать тому, чтобы он использовал тонны ЦП, ничего не делая.
Логическое значение _s_stop
должно быть объявлено изменчивым в примере кода, иначе чрезмерно амбициозный оптимизатор может вызвать бесконечный цикл программы.