Рубиновые регулярные выражения: отрицательное соответствие - PullRequest
2 голосов
/ 31 марта 2011

Мне было интересно, можно ли использовать отрицательное сопоставление для целых слов, чтобы что-то вроде [^(<em>.*?<\/em>)] соответствовало бы всему, кроме текста между (и включая) <em>...</em>.

Я думал об использовании негативного взгляда, но я не думаю, что это сработает, так как мне нужно проверить и открытие <em>.

Конечно, я мог бы просто использовать положительное регулярное выражение, а затем вычесть совпадения из исходного текста, но я ищу более «элегантное» решение.

спасибо за любую помощь

Ответы [ 2 ]

4 голосов
/ 31 марта 2011

String#split работает как отрицательное совпадение.Он возвращает вам массив любой части, которая не соответствует регулярному выражению.

'XXXXXXXX<em>YYYYYYY</em>ZZZZZZZZ'.split(%r|<em>.*?</em>|)
# => ['XXXXXXX', 'ZZZZZZZZ']

И если вы хотите вернуть его обратно в строку, просто выполните join.

'XXXXXXXX<em>YYYYYYY</em>ZZZZZZZZ'.split(%r|<em>.*?</em>|).join
 # => 'XXXXXXXZZZZZZZZ'
0 голосов
/ 31 марта 2011

Все, что связано с lookaround , заключается в том, что он не потребляет никакого ввода.Если вы хотите сопоставить все, кроме шаблона, это означает, что вы хотите сопоставить префикс и суффикс этого шаблона.Чтобы соответствовать суффиксу, вы, вероятно, хотите использовать - и выбросить - шаблон, который вам не нужен.Но отрицательный взгляд не потребляет.

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