я соединял эту упрощенную версию моего кода, чтобы продемонстрировать вопрос:Java Regex для фильтрации строк с комментариями не работает, как ожидалось
public static void main(String []args){
String content="1 [thing i want]\n" +
"2 [thing i dont want]\n" +
"3 [thing i dont want] [thing i want]\n" +
"4 // [thing i want]\n" +
"5 [thing i want] // [thing i want]\n";
String BASE_REGEX = "(?!//)\\[%s\\]";
Pattern myRegex = Pattern.compile(String.format(BASE_REGEX, "thing i want"));
Matcher m= myRegex.matcher(content);
System.out.println("match? "+m);
String newContent = m.replaceAll("best thing ever");
System.out.println("regex "+myRegex);
System.out.println("content:\n"+content);
System.out.println("new content:\n"+newContent);
}
я ожидаю мой выход будет:
new content:
1 best thing ever
2 [thing i dont want]
3 [thing i dont want] best thing ever
4 // [thing i want]
5 best thing ever // [thing i want]
но Я вижу:
new content:
1 best thing ever
2 [thing i dont want]
3 [thing i dont want] best thing ever
4 // best thing ever
5 best thing ever // best thing ever
Как исправить регулярное выражение?
Неизмененная строка:
content:
1 [thing i want]
2 [thing i dont want]
3 [thing i dont want] [thing i want]
4 // [thing i want]
5 [thing i want] // [thing i want]
'' (?! //) 'всегда истинно, поскольку следующий потребляемый символ является' ['. Кажется, вы избегаете замены в одной строке комментариев, правильно? Сопоставьте эти комментарии и замените совпадения только в других контекстах. –
Я не вижу отношения между вещами, которые вы хотите, и не делайте этого. Не могли бы вы разместить отдельный текстовый блок строки 'content', если он будет опубликован? – sln
@sln. Я добавил его к исходному вопросу. – MDKF