Перевернутая дилемма регулярных выражений - PullRequest
1 голос
/ 07 июля 2019

Я искал на форуме, но не могу найти ответ.

Я использую ruby ​​v1.9.3 и мне нужно инвертировать соответствие регулярному выражению.например:

 string = "once upon a time long ago"
    string.scan(/upon/).join

, но:

    string.scan(/[^upon]/).join

==> "ce a time lg ag"

также сопоставляются отдельные буквы "после", по-видимому, вызванные скобками.

Редактировать: Спасибоза это он быстро отвечает всем.Извините, я не думаю, что я объяснил себе очень хорошо, что я хочу сделать, это сопоставить все, кроме "на":

Рубулярный пример

Надеюсь, теперь все яснее

Ответы [ 3 ]

1 голос
/ 07 июля 2019

Оберните слово в пределах границ, чтобы сформировать слово «после» (плюс пробел):

"once upon a time long ago".gsub(/\bupon \b/, '')
# "once a time long ago"

Использование sub или gsub, в зависимости от количества случаев, которые вы можете найти в вашемстрока.

0 голосов
/ 07 июля 2019

Неэкранированные скобки предназначены для соответствия символам. Например, любое из следующих регулярных выражений будет соответствовать строке 'Upon':

/[upon]/
/[upoXn]/
/[nopu]/
#==> upon
#==> upon
#==> upon

Однако ^ имеет особое значение в скобках: это оператор отрицания.

Итак, /[^upon]/ определенно не совпадает ни с одним символом, содержащимся в строке 'Upon'.

Это продемонстрировано в вашем примере:

string.scan(/[^upon]/).join
#=> "ce a time lg ag"

Если вы просто хотите заменить строку 'на', то String::gsub (как предполагает @Sebastian Palma) должно сработать. YMMV.

0 голосов
/ 07 июля 2019

Я предполагаю, что это выражение также может работать:

(?:\bupon\b\s+)|(.*?)

Тест

re = /(?:\bupon\b\s+)|(.*?)/m
str = 'once upon a time long ago once upon a time long ago once upon a time long ago '
subst = '$1'

result = str.gsub(re, subst)

puts result

Выражение объяснено на верхней правой панели этой демонстрации , если вы хотите изучить его или изменить его, а в этой ссылке , вы можете посмотреть, как она будет шаг за шагом совпадать с некоторыми примерами входных данных, если хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...