2010-06-15 13 views
2

У меня есть маркер, как например:

<delim2=((?{ $MATCH{delim} }))> 

и то, что я хочу, чтобы это произошло для delim2, чтобы захватить и установить на значение delim. Когда я запускаю это, устанавливается delim2, но захват никогда не выполняется. Я думаю, что это ошибка в моих рассуждениях: я пытаюсь заковать эту форму:

<ALIAS= (PATTERN)>  Match pattern, save match in $MATCH{ALIAS} 

и эту форму: (?{ MATCH{delim} }) во что-то вроде этого

<ALIAS= ((?{MATCH{delim}))>  Matches the value of $MATCH{delim} save to $MATCH{delim2} 

, но это просто не кажется действительным , Я могу проверить свои оригинальные работы с токеном. <delim2=((?{ die $MATCH{delim} }))> умрет со значением, и, если я его скопирую, я получаю правильный захват и все работает <delim2=(')>? Итак, как я могу добиться разумных результатов, имея динамический шаблон?

ответ

4

(?{ $MATCH{delim} }) не утверждает, что $MATCH{delim} появляется здесь на входе; только то, что это истинное значение. Regexp :: Grammars должен иметь конструкцию с именем-backreference, подобную perl \k<NAME>, но это не так (и вы не можете использовать \k<NAME>, потому что Regexp :: Grammars сохраняет свои результаты где-то совсем другое).

Вы могли бы сделать что-то вроде

(??{ quotemeta $MATCH{delim} })<delim2=(?{ $MATCH{delim} })> 

, которая ужасно, но, кажется, работает в тестировании. Или вы можете сдаться и пойти в Parse :: RecDescent, который имеет лучшую поддержку такого рода вещей. Или вы можете начать взламывать R :: G.

+0

Я бы поднял это дважды, если мог. На самом деле у меня был ответ от D вчера, но ваше добавление 'quotemeta' просто решило проблему, над которой я работал некоторое время. Спасибо. На самом деле, я сделаю это еще на один шаг, я принимаю все негативное, о котором я говорил о вас в прошлом месяце. hobbs ++ –

+0

Дамиан говорит: «В следующем выпуске Regexp :: Grammars вы сможете использовать то, что я называю« вспомогательные обратные ссылки ».» –

+0

Я даже не слышал от вас в прошлом месяце. Черт, это означает, что ты говоришь за моей спиной;) Во всяком случае, я рад слышать, что Дамиан работает над этим. – hobbs

 Смежные вопросы

  • Нет связанных вопросов^_^