Regex, чтобы найти слово между знаком $$ - PullRequest
0 голосов
/ 30 апреля 2018

Я хочу, чтобы регулярное выражение находило слово только между знаком $$. Он должен начинаться и заканчиваться знаком $. Я пробовал ниже выражение

final String regex = "\\$\\w+\\$";
final Pattern pattern = Pattern.compile(regex);
final Matcher matcher = pattern.matcher("$abc$ cde$efg$hij pqr");

Это должно дать мне число 1. Но мое регулярное выражение также учитывает второе вхождение (cde $ efg $ hij), которое оно не должно учитывать, поскольку оно не начинается и не заканчивается знаком $$.

Ответы [ 2 ]

0 голосов
/ 30 апреля 2018

Для меня проблема заключалась в извлечении полей между знаками доллара.

List<String> getFieldNames(@NotNull String str) {
    final String regex = "\\$(\\w+)\\$";
    Pattern pattern = Pattern.compile(regex);
    Matcher matcher = pattern.matcher(str);
    List<String> fields = new ArrayList<>();
    while (matcher.find()) {
        fields.add(matcher.group(1));
    }
    return fields;
}

Это вернет список слов между знаками доллара.

0 голосов
/ 30 апреля 2018

Вы можете использовать границы без слов:

final String regex = "\\B\\$\\w+\\$\\B"; 

Шаблон будет соответствовать, только если $abc$ не предшествует и сопровождается символами слова. Смотрите regex demo .

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

String regex = "\\B\\$\\w+\\$\\B";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher("$abc$ cde$efg$hij pqr");
while (matcher.find()){
    System.out.println(matcher.group(0)); 
} // => $abc$

Помимо границ, не относящихся к словам, вы можете использовать границы пробела , если вы хотите сопоставлять только символы пробела или начало / конец строки:

String regex = "(?<!\\S)\\$\\w+\\$(?!\\S)";

Или используйте однозначные границы слов (как я их называю):

String regex = "(?<!\\w)\\$\\w+\\$(?!\\w)";

Отрицательный просмотр (?<!\\w) провалит совпадение, если слово char будет найдено слева от текущего местоположения, а отрицательный просмотр (?!\w) не даст совпадение, если слово char будет найдено справа от текущее местоположение.

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