Оператор Java Regex OR не работает должным образом - PullRequest
0 голосов
/ 10 декабря 2018

У меня есть эти строки:

String test1=":test:block1:%a1%a2%a3%a4:block2:BL";

и

String test2=":test:block2:BL:block1:%a1%a2%a3%a4";

Я создал шаблон регулярного выражения, чтобы изолировать этот фрагмент строки

 block1:%a1%a2%a3%a4:

из остальной части строки, позволяющей этим строкам выглядеть следующим образом:

in the case of test1="block1:%a1%a2%a3%a4:"; (with ':' at the end)
in the case of test2=":block1:%a1%a2%a3%a4"; (with ':' at the beggining)

Регулярное выражение, которое я создал:

"(block1:(.*?):|:block1:(.*))";

С test1 работает, но с test2 возвращает меняэто:

block1:%a1%a2%a3%a4:block2:BL";

Может кто-нибудь помочь мне с этим?

Ура!

1 Ответ

0 голосов
/ 10 декабря 2018

Вы можете использовать

block1:([^:]*)

Он соответствует block1: тексту и затем захватывает в Группу 1 любые 0 или более символов, отличных от :.

См. Демонстрация Java:

String patternString = "block1:([^:]*)";
String[] tests = {":test:block1:%a1%a2%a3%a4:block2:BL",
                  ":test:block2:BL:block1:%a1%a2%a3%a4"};
for (int i=0; i<tests.length; i++)
{
    Pattern p = Pattern.compile(patternString, Pattern.DOTALL);
    Matcher m = p.matcher(tests[i]);
    if(m.find())
    {
        System.out.println(tests[i] + " matched. Match: " +
                    m.group(0) + ", Group 1: " + m.group(1));
    }
}

Вывод:

:test:block1:%a1%a2%a3%a4:block2:BL matched. Match: block1:%a1%a2%a3%a4, Group 1: %a1%a2%a3%a4
:test:block2:BL:block1:%a1%a2%a3%a4 matched. Match: block1:%a1%a2%a3%a4, Group 1: %a1%a2%a3%a4
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...