Я знаю, что это было задано миллион раз, но я не могу заставить его работать.
Я фильтрую струны из веб-API игры (http://pathofexile.com/api/public-stash-tabs-осторожно, ~ 5 МБ данных извлечет из получения), пытаясь найти, какой тип атрибута я смотрю, потому что мне позже нужно заменить его. (Я смотрю на массив «explicitmods» в каждом из объектов элемента и определяю, какой тип модификатора он.) Я буду хранить значения или диапазоны, чтобы позже я мог определить, что совпадает. String.replaceall < /code> не включена здесь, потому что этот бит работает просто отлично. < /P>
Это мой тестовый класс. Все тесты терпят неудачу. Я провел тестирование каждого шаблона на regex101.com, чтобы быть уверенным, но у них есть только JavaScript, PHP, Python и Golang. Каждый комментарий метода имеет ссылку на тест, который я сделал на Regex101. < /P>
package arbitrary.package.name;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import static org.junit.Assert.assertTrue;
public class RegexTests {
private static Logger log = LoggerFactory.getLogger(RegexTests.class);
@Test
public void testIntegers() {
// https://regex101.com/r/PVfYGX/1
assertTrue(compileAndMatch("/.*(.\\d+).+(.\\d+).*/", "Adds 80 to 115 Physical Damage"));
}
@Test
public void testIntegersWithRanges() {
// https://regex101.com/r/u3UQqM/1
assertTrue(compileAndMatch("/.*(\\d+-\\d+).*(\\d+-\\d+).*/", "Adds (4-5) to (8-9) Physical Damage"));
}
@Test
public void testDecimals() {
// https://regex101.com/r/CpaV1y/1
assertTrue(compileAndMatch("/.*(\\d+.?\\d+).*/", "0.2% of Elemental Damage Leeched as Life"));
}
private boolean compileAndMatch(String regex, String text) {
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(text);
log.info("{} {} \"{}\"", regex, matcher.matches() ? "matches" : "does not match", text);
return pattern.matcher(text).matches();
}
}
< /code>
Пример Stacktrace (все одинаковы): < /p>
2017-02-20 20:35:44.876 [main] INFO arbitrary.package.name.RegexTests - /.*(\d+.?\d+).*(\d+.?\d+).*/ does not match "Adds (4-5) to (8-9) Physical Damage"
java.lang.AssertionError
at org.junit.Assert.fail(Assert.java:86)
at org.junit.Assert.assertTrue(Assert.java:41)
at org.junit.Assert.assertTrue(Assert.java:52)
at arbitrary.package.name.RegexTests.testIntegersWithRanges(RegexTests.java:23)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
< /code>
Заранее спасибо за вашу помощь, < /p>
Подробнее здесь: https://stackoverflow.com/questions/423 ... ch-extract