Зависит. Каждая реализация RegExp отличается. Например, вы не можете сделать это в JavaScript, но можете в Ruby. Функция, которую вы ищете, называется «положительный lookbehind».
/(?<=starting-)this is my string(?=-)/
У вас есть пример как положительного, так и положительного просмотра назад опережающего просмотр здесь: первый является нулевой шириной утверждения, что за «это» вы «starting-», а второй является нулевой шириной утверждения, что после «строки» у вас есть «-».
Большинство ароматов RegExp имеют взгляд. Некоторые (например, JS) не имеют lookbehind.
Если у вас нет, вы можете сделать некоторые трюки. Самый простой из них является просто сделать без регулярному_выражению просмотра назад, и захватить нужную строку:
/starting-(this is my string)-/
Однако, поскольку матчи не могут перекрываться, вы можете не быть в состоянии использовать этот метод иногда. Например, если вы пытаетесь соответствовать словам, окруженных хэш и попробовать
/#(\w+)#/g
и попробовать его на нитке, как «моя # лошадь # любит # ест # сено # для # завтрака #», вы бы только получить «лошадь», «съесть» и «за», поскольку матчи для «# eat #» и «# for #» будут потреблять хэши вокруг «сена» и «завтрак».
Другое - это изменение как строки, так и шаблона, вместо этого используйте lookahead; но это ужасно для чтения, а также работает, только если вам не нужны как lookahead, так и lookbehind в том же шаблоне.
Man, вы не правы JS. Рассмотрим «начало» - это моя строка - «. Match (/^start - ([^ -] *) - /)'. – twil
@ twil: Я действительно считал это и отвергал его - вы можете прочитать мой обновленный ответ по этой причине. В частности, попробуйте сопоставить «лошадь», «съесть», «сено», «за», «завтрак» из моего примера, используя свой метод. – Amadan
Ваш ответ хорош, но вы заменяете одну проблему другой и заявляете неправильно о заданном вопросе. – twil