"Для" цикла, работающего в потоке GUI? Если так, да, Вам будет нужен DoEvents. Можно хотеть использовать отдельный Поток, в этом случае DoEvents не требовался бы. можно сделать это в VB6 (не простой).
Требуется утверждение отрицательного просмотра назад нулевой ширины. Попробуйте / (? , который говорит именно то, что вы ищете, то есть найдите все «y», перед которыми не стоит «x», но не включает предыдущий символ, который является часть нулевой ширины.
Отредактировано для добавления: По-видимому, это поддерживается только в Ruby 1.9 и выше.
Ruby, к сожалению, не поддерживает отрицательный просмотр назад , поэтому у вас возникнут проблемы, если вам нужно будет искать более одного символа. Для всего одного символа вы можете решить эту проблему, зафиксировав совпадение:
/[^x](y)/
В PCRE вы используете отрицательный просмотр назад:
(:<!x)y
Не уверен, что это поддерживается Ruby, но вы всегда можете посмотреть вверх.
Это можно сделать с помощью отрицательного просмотра назад, (?
Извините за подключение моих собственных материалов (или, если это не разрешено / неодобрительно в SO), но я быстро написал в блоге о своем опыте реорганизации ресурсов в большом Silverlight 2 (т.е. без MergedDictionaries) проект некоторое время назад. Сообщение здесь .
это намного сложнее, если вы хотите избежать гораздо большего, чем один символ перед y
. Тогда вам нужно будет сделать что-то вроде:
"abby y crabby bally +y".scan(/(.*?)(y)/).reject {|str| str[0] =~ /ab/} # => [[" ", "y"], [" ball", "y"], [" +", "y"]]
"abby y crabby bally +y".scan(/(.*?)(y)/).reject {|str| str[0] =~ /ab/}.map {|match| match[1]} # => ["y", "y" "y"]