Сделайте три разных соответствия и обработайте комбинацию трех ситуаций, используя условную логику в программе. Вам не нужно обрабатывать все в одном гигантском регулярном выражении.
EDIT: позвольте мне немного расшириться, потому что вопрос просто стал более интересным: -)
Общая идея, которую вы пытаетесь для захвата здесь следует сопоставлять определенный шаблон регулярного выражения, но не тогда, когда в тестовой строке присутствуют некоторые другие (могут быть любые числа) шаблоны. К счастью, вы можете использовать свой язык программирования: просто сохраняйте регулярные выражения и просто используйте составной условный. Лучшей практикой было бы захватить эту идею в многократно используемом компоненте, поэтому давайте создадим класс и метод, которые его реализуют:
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
public class MatcherWithExceptions {
private string m_searchStr;
private Regex m_searchRegex;
private IEnumerable<Regex> m_exceptionRegexes;
public string SearchString {
get { return m_searchStr; }
set {
m_searchStr = value;
m_searchRegex = new Regex(value);
}
}
public string[] ExceptionStrings {
set { m_exceptionRegexes = from es in value select new Regex(es); }
}
public bool IsMatch(string testStr) {
return (
m_searchRegex.IsMatch(testStr)
&& !m_exceptionRegexes.Any(er => er.IsMatch(testStr))
);
}
}
public class App {
public static void Main() {
var mwe = new MatcherWithExceptions();
// Set up the matcher object.
mwe.SearchString = @"\b\d{5}\b";
mwe.ExceptionStrings = new string[] {
@"\.$"
, @"\(.*" + mwe.SearchString + @".*\)"
, @"if\(.*" + mwe.SearchString + @".*//endif"
};
var testStrs = new string[] {
"1." // False
, "11111." // False
, "(11111)" // False
, "if(11111//endif" // False
, "if(11111" // True
, "11111" // True
};
// Perform the tests.
foreach (var ts in testStrs) {
System.Console.WriteLine(mwe.IsMatch(ts));
}
}
}
Итак, мы установили строку поиска (пять цифр) , несколько строк исключения (ваши s1, s2 и s3), а затем попытайтесь сопоставить несколько тестовых строк. Печатные результаты должны быть такими, как показано в комментариях рядом с каждой тестовой строкой.
systemProperties
используются для передачи свойств, которые вы обычно передаете с -D
, во время выполнения.
jvmArgs
предназначены для передачи аргументов в JVM.
То, что вы хотите использовать, это args
вместо одного из вышеперечисленных.
bootRun {
args = [
'--spring.config.additional-location=file:C:/demo_class_path/',
'--server.port=8090'
]
}
Важно включить /
в конце для spring.config.additional-location
. Когда он не заканчивается на /
, он интерпретируется как базовое имя файла, а не местоположение файла.