#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 />
, поскольку это удалит текст, который должен был остаться.