Я считаю, что это должно следовать соглашениям для .Net Framework Regular Expression Flavor, хотя я не очень хорошо знаю C ++ ... если нет, то больше склоняется к реализации и API Java и похож на метод [Regex] Matcher.matches()
, он попытается сопоставить регулярное выражение со всем источником (если он не соответствует всему источнику, но, возможно, соответствует только его части, попытка не удастся). Вызов .Net для функции Regex.Match()
вызовет Найти выражение в указанном входе и вернет true, если найдено
Это был длинный способ сказать: убедитесь, что во входной строке нет пробелов или других символов.
Еще одно замечание - если ваш ввод на самом деле состоит из нескольких строк, особенно если другие строки содержат даты и время в скобках ()
- ваше выражение содержит жадные квантификаторы, примененные к классу точечных символов ".
", который по крайней мере заставьте его работать ОЧЕНЬ МЕДЛЕННО для больших входных данных, если не как-то отключить его и заставить его не работать
В любом случае вы можете сделать свое выражение немного более эффективным, изменив экземпляры с .*
на [^(]*
и [^=]*
, соответственно, следующим образом:
"^=+ [^(]* \\((\\d+)/(\\d+)/(\\d+) @ (\\d+):(\\d+):(\\d+)\\) ([^=]*) =+"
Жадные квантификаторы, которые вы бы заменили, в противном случае соответствовали бы всей строке много раз, а затем возвращались многократно, только чтобы, наконец, вернуться на место через десять или двадцать символов после того, как он начал говорить «о, хорошо, это соответствует ...» что дальше? "