|
|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Serg 2:5020/400 18 Nov 2002 23:33:42 To : Serg Subject : Проблемы с логикой регулярных выражений -------------------------------------------------------------------------------- Mon Nov 18 2002 22:25, Serg wrote to All: S> From: "Serg" <serg@enseza.elcom.ru> S> Hi All, S> Hе знаю, в ту ли эху я решил обратиться, но... поскольку регулярные S> выражения это наиболее близко именно разработчикам на перле, то обращаюсь S> именно сюда: До этого момента у меня небыло проблем с логикой регулярных S> выражений, но тут вдруг потребовалось... S> Итак. Есть строка. Для определенности: S> $txt='fhjd abra1 jwfhui abra2 hiwf myexp jioer abra3'; S> Hу так вот. Hам известно, что в строке есть фраза "myexp". Hо в строке S> есть так же различные вариации abra\d, идущие перед и после "myexp". S> Требуется выдрать ближайший abra\d слева от myexp. К примеру из наше S> строки, регэксп должен выдрать abra2. S> Как предполагаю я, надо задать регэксп типа S> $txt=~s/(abra\d)(?:abra\d)*myexp//g; Сорри, конечно же не (?:), а (?!). Глючить уже с этими регэкспами начал:) Тогда конечно регэксп выглядит так: $txt=~s/(abra\d)(?!abra\d)*myexp//g; Hо тем не менее он всеравно не работает:(. S> И затем взять значение в переменной $1. Увы - это не работает:(. Оговорюсь S> - я не уверен что конкретно в перле синтаксис (?:...) работает как я S> предполагаю. S> Он означает, что альтернатива находящаяся в скобках берется как отрицание S> (на подобии [^...] только текст а не символ) - это я взял из доки к S> регэкспам на VB, но там мой пример тоже не работает. Как это осуществить S> на перле? --- ifmail v.2.15dev5 * Origin: FidoNet Online - http://www.fido-online.com (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор Архивное /ru.perl/166797cfdddca.html, оценка из 5, голосов 10
|