регулярное выражение, чтобы найти переменные, окруженные% в строке - PullRequest
0 голосов
/ 24 мая 2018

Необходимо найти «переменные» в строке.Значение переменной% [/ w] +% означает, что в строке может быть несколько переменных:

%ABC%
%ABC%-%RED%
Lorem ipsum %GeT% sit amet, %% consectetur %QW23% elit. 

В третьем примере %% НЕ должно быть найдено, оно будетбыть заменены на один%.Что-то вроде # [\ w + -] + # не работает, потому что не может определить, что во второй строке это% ABC% и% RED%, а скорее% -%.У меня сложилось впечатление, что необходимо использовать как группы, так и обратные ссылки, но я не могу найти хорошего примера, чтобы объяснить, как это сделать на Java.


Люди спрашивают некоторые ответы на вопросы, поэтомувот, пожалуйста:

Что именно я ожидаю в качестве окончательного результата?Что ж, поскольку субъект предполагает, что% ABC% - это «переменная», которая определяется где-то еще, конечная цель - «найти переменную и заменить ее на правильное значение».Цель регулярного выражения - найти все «переменные» в строке.

Итак, где-то в памяти есть карта, где:

ABC = "mike"
RED = "Red Storm"
GeT = "hometown"
QW23 = "Quick and easy"

(примечание: еслиключи должны иметь% вокруг имени, что тоже нормально)

Цель регулярного выражения - найти переменную, поэтому в первой строке она найдет ABC (или% ABC%), так чточто код и поиск ABC, чтобы определить, что правильным значением является mike, и так далее ... Вот требуемый вывод приведенных строк:

mike
mike-Red Storm
Lorem ipsum hometown sit amet, % consectetur Quick and easy elit. 

Я не ожидаю, что выражение reg на самом делесделать полную замену, но просто найти кусочки, чтобы другой код и сделать замену.Я также не ожидаю, что он преобразует %% в%, но оставлю это в покое, чтобы после простого поиска %% можно было преобразовать его в%.

Ответы [ 2 ]

0 голосов
/ 24 мая 2018

Если вы хотите сопоставить переменные в 3 группах захвата и не хотите сопоставлять %%, вы можете использовать чередование |, чтобы сопоставить %% и захватить переменные, используя 3 группы захвата:

%%|(%)(\w+)(%)

Демонстрационная версия Java

0 голосов
/ 24 мая 2018

Я полагаю, что вы ищете шаблон регулярных выражений

(?<!%%)(?<=%)\w+(?=%)(?!%%)

, который бы нашел переменные, окруженные по одному символу % на каждой стороне.

Проверка регулярного выражения здесь .


Java-код:

final Pattern pattern = Pattern.compile("(?<!%%)(?<=%)\\w+(?=%)(?!%%)");
final Matcher matcher = pattern.matcher(input);

while (matcher.find()) {
    System.out.println(matcher.group(0));
}

Проверка кода Java здесь .


ОБНОВЛЕНИЕ:

Если вы хотите поймать группы, как указано в вашем комментарии ниже, используйте следующий шаблон:

(?<!%)(%)(\w+)(%)(?!%)

Проверьте этот шаблон здесь .


... и код Java:

final Pattern pattern = Pattern.compile("(?<!%)(%)(\\w+)(%)(?!%)");
final Matcher matcher = pattern.matcher(input);

while (matcher.find()) {
    System.out.println(matcher.group(1) + " | " + 
                       matcher.group(2) + " | " + 
                       matcher.group(3));
}    

Проверьте этот код здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...