5

Всем привет!

"Some people, when confronted with a problem, think "I know, I'll use regular expressions." Now they have two problems!" (c) Jamie Zawinski

Помогите найти всех "кошек" через регулярные выражения! :)

<div>let's try to find this cat and this cat</div>
<div>let's try to find this cat and this cat</div>

Вот это не сработало:

(?<=<div>)((?!<\/div>)(cat|(?:.|\n))+)(?=<\/div>)

Regular expression visualization Debuggex Demo

Второй вопрос еще интересней - найти только тех кошек, которые сидят в блоках с классом "cats":

cat
<div class="cats">black cat, white cat</div>
cat
<div class="dogs">black cat, white cat</div>
cat
  • Кошки, которых нужно найти спрятаны в DIVах. Остальные кошки меня не интересуют. Я могу найти только последнюю, или первую кошку, но найти нужно всех кошек, которые сидят в DIVах. Возможно такое, или нет? – DopustimVladimir Jan 22 '14 at 19:42

1 Answers1

2

Для первого случая:

Пример

/<div.*?>|cat(?=.*?<div>)|(cat)(?=.*?<\/div>)/g
  • пропускает открывающиеся div, или
  • пропускает cat, за которыми следует открывающийся div, или
  • захватывает cat, если за ним следует минимальное количество символов и закрывающийся </div>.

Для второго случая

Пример

/<div class="cats">|<div.*?<\/div>|(cat)(?=.*?<\/div>)/g
  • пропускает открывающийся div с классом cats, или
  • пропускает прочие div - целиком, или
  • захватывает cat, если за ним следует минимальное количество символов и закрывающийся </div>.

UPD: Благодаря дельным замечаниям ReinRaus новые варианты регулярок переписаны и теперь валидны как для PCRE, так и в js-реализации. Спасибо)

Mi Ke Bu
  • 967
  • 1
    1 https://regex101.com/r/tB7kR8/8 2 https://regex101.com/r/tB7kR8/9 и https://regex101.com/r/tB7kR8/10 – ReinRaus Apr 23 '16 at 20:33
  • 1
    1 https://regex101.com/r/tB7kR8/11 – ReinRaus Apr 23 '16 at 22:12
  • @ReinRaus, благодарю, поправил ответ. Новые версии регулярок: 1 - https://regex101.com/r/tB7kR8/16 2 - https://regex101.com/r/tB7kR8/15 – Mi Ke Bu Apr 25 '16 at 12:31