Исходное регулярное выражение:
<div class="msgln"(.*?)</div>
Я пытаюсь отредактировать это регулярное выражение так, чтобы оно выбирало только те «строки», которые соответствуют этому шаблону:
(begining literal string)
, за которым следует (any number of characters if they don't contain a specific string)
сопровождаемый (ending literal string)
наиболее часто встречаемым я нашел ^((?!(cat|dog)).)*$
, но, похоже, он не работает, если я не правильно его использую.
Пример:
<?php
$phpString = '<div class="msgln" a="dog" b="cat">stuff here</div>
<div>just another line</div>
<div class="msgln" a="another" b="one">stuff here</div>';
$phpString = preg_replace('~<div class="msgln"(.*?)</div>~i', "", $phpString);
?>
в примере я пытаюсь выбрать только первую «строку» в строке с cat|dog
, но не третью с another|one
. Исходное регулярное выражение выше выбирает обе строки div с class="msgln"
, как и ожидалось (игнорируя среднюю линию div), поэтому я пытаюсь изменить часть (.*?)
, чтобы выбрать только строку с кошкой или собакой в ней.
Я посмотрел, но не могу найти решение, которое работает. Предыдущие поиски имеют несколько общих предложений, таких как приведенный выше, но ни один из них не работает.
Я нашел это
(.*)(?=(dog|cat))(.*)
, который выбирает строку, но пытается использовать отрицательный, чтобы выбрать все остальные
(.*)(?!=(dog|cat))(.*)
не работает (с и без =), имеет тот же эффект, что и оригинал
(.*?)
Некоторая информация:
- Работа с PHP
- Нет базы данных, нужно работать с плоскими файлами
- Нужно сделать несколько других вещей со строкой, которая может стать причиной большого сбоя. Regex значительно ускоряется на основе данных испытаний