Проблема с кванторами и оглядывается

### Ruby 1.8.7 ###

require 'rubygems'
require 'oniguruma' # for look-behind

Oniguruma::ORegexp.new('h(?=\w*)')
# => /h(?=\w*)/

Oniguruma::ORegexp.new('(?<=\w*)o')
# => ArgumentError: Oniguruma Error: invalid pattern in look-behind

Oniguruma::ORegexp.new('(?<=\w)o')
# => /(?<=\w)o/


### Ruby 1.9.2 rc-2 ###

"hello".match(/h(?=\w*)/)
# => #<MatchData "h">

"hello".match(/(?<=\w*)o/)
# => SyntaxError: (irb):3: invalid pattern in look-behind: /(?<=\w*)o/

"hello".match(/(?<=\w)o/)
# => #<MatchData "o"> 

Я не могу с помощью кванторов с, оглядываются?

18
задан edtsech 13 August 2010 в 17:04
поделиться

1 ответ

Проблема в том, что Ruby не поддерживает поиск назад переменной длины. Квантификаторы сами по себе отсутствуют, но они не могут сделать длину просмотра назад недетерминированной.

Perl имеет такое же ограничение, как и почти все основные языки с регулярными выражениями.

Попробуйте использовать прямое совпадение (\ w *) \ W *? O вместо просмотра назад.

27
ответ дан 30 November 2019 в 07:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: