Что слово является границей в regexes?

Примите во внимание, что, если Вы собираетесь быть выполнением большого количества поисков, существуют контейнеры STL, которые лучше для этого. Я не знаю, каково Ваше приложение, но ассоциативные контейнеры как станд.:: карта может быть достойной рассмотрения.

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

105
задан Wiktor Stribiżew 25 October 2017 в 17:11
поделиться

6 ответов

Граница слова в большинстве диалектов регулярных выражений - это позиция между \ w и \ W (символ, не являющийся словом), или в начало или конец строки, если она начинается или заканчивается (соответственно) символом слова ( [0-9A-Za-z _] ).

Итак, в строке "- 12 ", он будет соответствовать перед 1 или после 2. Тире не является словесным символом.

79
ответ дан 24 November 2019 в 04:01
поделиться

Граница слова может находиться в одной из трех позиций:

  1. Перед первым символом в строке, если первый символ является символом слова.
  2. После последнего символа в строке, если последний символ является символом слова.
  3. Между двумя символами в строке, где один является символом слова, а другой не является символом слова.

Символы слова являются буквенно-цифровыми; знака минус нет. Взято из Учебник по регулярным выражениям .

23
ответ дан 24 November 2019 в 04:01
поделиться

Граница слова - это позиция, которой либо предшествует символ слова и не следует за ним, либо за которой следует символ слова и не предшествует один.

12
ответ дан 24 November 2019 в 04:01
поделиться

Ознакомьтесь с документацией по граничным условиям:

http://java.sun.com/docs/books/tutorial/essential/regex/bounds.html

Ознакомьтесь с этим образец:

public static void main(final String[] args)
    {
        String x = "I found the value -12 in my string.";
        System.err.println(Arrays.toString(x.split("\\b-?\\d+\\b")));
    }

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

[Я нашел значение - в своей строке.]

Это означает, что символ «-» не воспринимается как находящийся на границе слова, потому что он не считается символом слова. Похоже, @brianary как бы опередил меня, поэтому он получил голосование "за".

4
ответ дан 24 November 2019 в 04:01
поделиться

Я считаю, что ваша проблема связана с тем, что - не является словесным символом. Таким образом, граница слова будет соответствовать после - , и поэтому не будет захватывать ее. Границы слов совпадают перед первым и после последнего символа слова в строке, а также в любом месте, где перед ним стоит символ слова или не-слово, а после - наоборот. Также обратите внимание, что граница слова - это совпадение нулевой ширины.

Одна из возможных альтернатив -

(?:(?:^|\s)-?)\d+\b

Это будет соответствовать любым числам, начинающимся с пробела и необязательного тире и заканчивающимся границей слова. Он также будет соответствовать числу, начинающемуся в начале строки.

1
ответ дан 24 November 2019 в 04:01
поделиться

Я думаю, что это граница (т. Е. Следующий за ним символ) последнего совпадения или начало или конец строки.

0
ответ дан 24 November 2019 в 04:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: