Удаление текста между тегами с помощью регулярного выражения

#php #regex

#php #регулярное выражение

Вопрос:

Как удалить текст между тегами br, используя regexp

 <br />var j=; var g=; g =G;j =30006;g =a;g =u;g =l;g =t;<br />
  

«var» и «;» всегда существуют, но другие слова и символы могут отличаться, что-то вроде этого:

 <br />var e=; var x=; x =tos;x =ах,;<br />
  

и т.д…

эти строки отображаются в случайном порядке:

 <br />Lorem ipsum dolor sit amet, consectetur adipiscing elit.<br />var j=; var g=; g =G;j =30006;g =a;g =u;g =l;g =t;<br /> Donec condimentum neque quis magna consectetur ut aliquam quam dictum. Fusce sed elit purus, lobortis tincidunt libero.<br />Nunc ultrices augue non augue tristique in aliquet urna adipiscing.<br /><br />var ... ;<br />
  

Спасибо!

Комментарии:

1. Для пояснения: вы хотите, чтобы выходные данные были <br /><br /> правильными?

2. Какой результат вы ищете? В обоих примерах вы просто хотите <br /><br /> ?

3. Почему вопрос не звучит примерно так: «Мне дан этот текст из X, и мне нужно удалить его часть, чтобы поместить в Y. Как я могу это сделать «. Задав вопрос «Как удалить текст между тегами br, используя регулярное выражение «, вы получите обязательные ответы «не делайте», которые ссылаются на вопрос о регулярном выражении . Это печально.

Ответ №1:

Регулярное выражение, которое вы хотите, будет

 <brs/?>.*?var.*?;.*?<brs/?>
  

и просто замените вывод на <br /><br /> .

Комментарии:

1. Я боюсь, что мое решение не будет работать должным образом, например, протестируйте его на string: <br />wwwwwwwwwwwww <br />var j=; var g=; g =G;j =30006;g =a;g =u;g =l;g =t;<br />something like this<br />wwww var e=; var x=; x =tos;x =ах,;<br /> это также приведет к удалению части <br />wwwwwwwwwwwww <br /> . Я работаю над обходным решением для этой проблемы.

2. Если вы знаете, что у вас внутри нет никаких других тегов, то это, <brs/?>[^<] var[^<]*?;[^<]*?<brs/?> , сработает. Но вам нужно было бы знать, что в тексте, который вы хотите удалить, нет других тегов.

Ответ №2:

Если все, что вам нужно, это выходные данные <br /><br /> , вам не нужны регулярные выражения:

 $result = "<br /><br />";
  

Это просто константа!

Комментарии:

1. если у вас есть полный html-документ, и вы хотели бы удалить все содержимое между тегами br, ваш код не сработает .

2. @poelinca: Я знаю. Вот почему я прокомментировал вопрос, в котором запрашивается информация о том, откуда берется этот текст и куда он направляется.

3. у меня много похожих строк, задача — найти все эти строки и удалить содержимое (извините за уродливый английский)

4. я видел ваш комментарий, но я все еще думаю, что вам следовало дождаться ответа от OP, поскольку вопрос довольно расплывчатый, вы не можете сказать, действительно ли вы опубликовали хорошее решение проблемы или нет.

5. @Vadim: и входные данные правильно сформированы, всегда с четным числом символов <br/>? Или вам приходится иметь дело с нечетными <br/> (например <br/>foo<br/>bar<br/> .

Ответ №3:

если количество <br /> элементов различается, вы можете использовать substr_count() для подсчета <br /> элементов, а затем вывести такое же количество отдельно.

Ответ №4:

Если вам нужно сделать это для всего текста и по парам <br/> , вы можете сделать что-то подобное :

 $str = 'test0 <br />var j=; var g=; g =G;j =30006;g =a;g =u;g =l;g =t;<br /> test1 <br /> test2';
$result = preg_replace('`<br */>.*?<br */>`s','<br/><br/>',$str);
var_dump($result);
  

Комментарии:

1. У вас регулярное выражение не будет работать, если у него есть <br> вместо <br/> . Более того, это также не будет работать с подобной строкой <br /> <br />var j=; var g=; g =G;j =30006;g =a;g =u;g =l;g =t;<br />something like this<br />var e=; var x=; x =tos;x =ах,;<br /> , поскольку это удалит текст, который должен был остаться.