Как не жадный поиск с самого начала

1

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

Если строка была >plaplapla>plaplapla(321), я хочу получить текст с регулярным выражением />.+?\(\d.\)/ начиная с последнего вхождения первого символа char >.

Например, если текст был >fir5t W0rd$ > $ec0nd here(2) >third here(), текст, который я хочу извлечь, это > $ec0nd here(2).

Я пытался использовать />.+?\(\d.\)/ но он дает мне >fir5t W0rd$ > $ec0nd here(2) вместо > $ec0nd here(2).

Как изменить регистр, чтобы он начинался с последней позиции появления символа '>'?

  • 0
    Это происходит потому, что строка обрабатывается слева направо, и после совпадения первого < .*? (хотя и ленивый) совпадает с первым ( , цифры, ) . Таким образом, он может совпадать по < символам.
Теги:

2 ответа

2
Лучший ответ

Поскольку ваша строка, кажется, > разделители используйте [^>] отрицается класс символа вместо .*? ленивый шаблон:

/>[^>]+\(\d+\)/

См. Демо-версию regex. Обратите внимание, что />[^>]+?\(\d+\)/ будет работать аналогично, но будет соответствовать первой (<DIGITS>) подстроке после >. См. Это регулярное выражение и другое выше.

подробности

  • > - буквальный >
  • [^>]+ - 1 или более символов, кроме > как можно больше
  • \( - буквальный (
  • \d+ - одна или несколько цифр
  • \) - a ).
1

Попробуй это:

/>[^>]+?\(\d\)/

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

Regex 101 Link

  • 0
    \ d + ...........

Ещё вопросы

Сообщество Overcoder
Наверх
Меню