Регекс - Метасимвол побега - PullRequest
0 голосов
/ 12 апреля 2020

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

Регулярное выражение : +. *? \?

abcdefghlkah    ezarekjha
a       fzfehuoa
aaaaaaaaaa$avaezvr  $    + efékjhfoéu?vrezavr?vezv$

Это соответствует строке ' + efékjhfoéu? '

Насколько я понимаю, строка начинается с символа '+' буквально, затем любой символ - ноль или несколько раз. Пока я хорошо это понимаю. Но тогда метасимвол '?' показывает, что не имеет смысла для меня здесь, потому что это влияет на предыдущий символ, который является '*'.

Может быть, метасимвол '?' ведет себя по-разному, когда дело доходит до затрагиваемого метасимвола, который в моем случае равен «\?».

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

Ответы [ 2 ]

0 голосов
/ 12 апреля 2020

При использовании после повторяющегося символа (например, {}, *, + ...), символ ? делает его ленивым и будет соответствовать наименьшему возможному. Например:

  • a+?b в aaaabaaba будет соответствовать [aaaab]aaba, наименьшее возможное
  • a+b в aaaabaaba будет соответствовать [aaaabaab]a, наиболее это может
0 голосов
/ 12 апреля 2020

Первый знак вопроса является метасимволом, но он не действует как {0,1}. Он заменяет подстановочный знак * с жадного (как можно большего количества совпадений) на ленивый (как можно меньше совпадений). Второй сбежал, поэтому он стал буквально символом вопросительного знака.

Мне было трудно понять ваш вопрос. Я надеюсь, что это объяснение - то, что вы ищете.

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