2013-11-12 4 views
0

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

Пример: удалить все <br>, & nbsp; и пробелы с конца строки ввода.

"Привет мир < < уш > > уш & NBSP; & NBSP;"

должен стать

"Привет мир".

Я пробовал различные перестановки

$input = preg_replace('/(<br>| |&nbsp;)*$/', '', $input); 

, но в конце концов мое регулярное выражение знание подводит меня. Как я могу это сделать?

+0

Что происходит? Что вы получаете? –

+2

Код, который вы предоставили, работает, когда '$ input =" Hello world

    ";'. Я что-то упускаю? (PHP 5.4.19 (cli)) – plasmid87

+0

@Sniffer - один
остался. – Olaf

ответ

1

регулярное выражение вы пробовали работы просто отлично. Установка Content-Type заголовок plain может помочь при отладке:

$string = "Hello world<br> <br>&nbsp; &nbsp; "; 
$input = preg_replace('/(<br>| |&nbsp;)*$/', '', $string); 
header('Content-Type: text/plain'); 
var_dump($input); 

Выходы:

string(11) "Hello world" 

3v4l demo.

+0

Как я писал в комментариях, это именно то, и вы заслуживаете медали! – Olaf

+0

@Olaf: yay (!) - рад, что вы это поняли :) –

-2

Если это только HTML/PHP теги Ваш, зачистки вы можете использовать PHP strip_tags функцию more info

$userInput ="Hello world<br> <br>&nbsp; &nbsp; "; 

$input = rtrim(strip_tags($userInput));//to rtrim to remove any whitespace at the end 
+0

Это не будет деактивировать ' ', и он будет разделять теги (при условии, что' strip_tags' не искажает строку до признания) * где угодно * на входе. Это должно быть легко увидеть. – Jon

+0

Извините, но @Jon прав. – Olaf

1

Не использовать регулярные выражения для разбора HTML. С DOM это:

$doc = DOMDocument::loadHTML('Hello world<br> <br>&nbsp; &nbsp;'); 
$selector = new DOMXPath($doc); 

echo trim($selector->query('//text()') 
    ->item(0) 
    ->nodeValue 
); 

Выход:

Hello World 

Однако, если регулярное выражение решение требуется - хотя, зная его лучше - использовать что-то вроде этого:

preg_match('~(.*?)(&nbsp;|<br>)~', $str, $matches); 
echo $matches[1]; 
+0

Хотя я в принципе согласен с первым предложением, давайте не будем переусердствовать здесь. Цель состоит не в том, чтобы * разбирать * ничего. – Jon

+0

@ Jon Я думаю, что это так. Я * хотел бы использовать DOM здесь – hek2mgl

+2

Что использовать открыто для обсуждения. То, что заявленная цель (обрезание всех суффиксов со стороны ввода), не является. Это не разбор. Вам не нужно разбирать JSON, чтобы удалить закрытие '}'. – Jon

Смежные вопросы