preg_replace на булет към li

C++ JAVA
User avatar
embaka
Гуру
Гуру
Posts: 2045
Joined: Sun May 04, 2008 8:43 pm
Answers: 105
Location: В. Търново
Contact:

preg_replace на булет към li

Post by embaka » Thu Mar 17, 2016 10:11 pm

Здравейте,

трябва ми от текст, в който се съдържа

•  Speck CandyShell Case 
• Цвят:  бял
• В наличност
• Производител: 
Speck 
• Модел: 
CandyShell Grip Case 
• Фабричен номер:
§bull; Качествен двуслоен хибриден кейс предоставящ висока степен на защита за 

&bull; и текста след него да се замини от <li>текстра след &bull;</li>, като се измахат също и празните места &nbsp; или space отпред и отзад в <li>

<li>Speck CandyShell Case</li>
<li>Цвят: бял</li>

Надявам се да сте ме разбрали и благодаря.

User avatar
lam3r4370
Шаман
Шаман
Posts: 3424
Joined: Wed Aug 20, 2008 4:12 pm
Answers: 131

Post by lam3r4370 » Fri Mar 18, 2016 12:54 am

Code: Select all

$str = "&bull;&nbsp; Speck CandyShell Case&nbsp;
&bull; Цвят&#58;&nbsp; бял&nbsp;";
$arr = explode&#40;'&bull;', $str&#41;;
unset&#40;$arr&#91;0&#93;&#41;;
foreach&#40;$arr as $str&#41; &#123;
	$str = trim&#40;str_replace&#40;'&nbsp;','',$str&#41;&#41;;
	echo '<li>'.$str.'</li>';
&#125;

User avatar
SVTerziev
Нов
Нов
Posts: 158
Joined: Fri Jul 13, 2012 12:32 am
Answers: 34

Post by SVTerziev » Fri Mar 18, 2016 7:23 am

@lam3r4370 при
Test &bull;this &bull;string with &bull;replicated&bull; test
маха "Test" от текста.

Ето и от мен [php]preg_replace('/\s?&bull;\s?/', '<li>', $string);[/php]

User avatar
lam3r4370
Шаман
Шаман
Posts: 3424
Joined: Wed Aug 20, 2008 4:12 pm
Answers: 131

Post by lam3r4370 » Fri Mar 18, 2016 9:55 am

Аз мислех, че всички започват с &bull; :D
Твоето ми харесва повече :?:

@embaka ако имаш \n може да разделяш по тях

User avatar
djman
Гуру
Гуру
Posts: 2796
Joined: Sat Sep 12, 2009 8:07 am
Answers: 107

Post by djman » Fri Mar 18, 2016 12:14 pm

[php]$input = str_replace('&nbsp;', ' ', $input);
$input = str_replace(' ', ' ', $input);
$input = str_replace("\n", '', $input);

$rows = array();

foreach(explode('&bull;', $input) as $row) {
if(strlen($row) === 0)
continue;

$rows[] = '<li>'.trim($row).'</li>';
}[/php]

User avatar
embaka
Гуру
Гуру
Posts: 2045
Joined: Sun May 04, 2008 8:43 pm
Answers: 105
Location: В. Търново
Contact:

Post by embaka » Mon Mar 21, 2016 3:54 pm

Искам так където се срещне bull, да го направи с отварящ и затварящ li а между тях текста който е след bull

User avatar
djman
Гуру
Гуру
Posts: 2796
Joined: Sat Sep 12, 2009 8:07 am
Answers: 107

Post by djman » Mon Mar 21, 2016 5:10 pm

Ами имаш 3-4 решения в тази тема, които правят точно това... :roll:

User avatar
embaka
Гуру
Гуру
Posts: 2045
Joined: Sun May 04, 2008 8:43 pm
Answers: 105
Location: В. Търново
Contact:

Post by embaka » Mon Mar 21, 2016 5:20 pm

Мисля, че съм написал как искам да е с preg_replace с регулярен израз. Аз ли не съм ясен или някой не е разбрал. Парсването мога и сам да си го направя, но това не е решение.

User avatar
SVTerziev
Нов
Нов
Posts: 158
Joined: Fri Jul 13, 2012 12:32 am
Answers: 34

Post by SVTerziev » Mon Mar 21, 2016 6:21 pm

Решението, което съм ти дал, до колкото го тествах работи както искаш.
Би ли обяснил как точно се разминава с вижданията ти + пример?

User avatar
embaka
Гуру
Гуру
Posts: 2045
Joined: Sun May 04, 2008 8:43 pm
Answers: 105
Location: В. Търново
Contact:

Post by embaka » Mon Mar 21, 2016 6:36 pm

нищо общо няма с вижданията ми,

никъде не се затваря </li> тага имаш отварящ таг с нещо напълно безмислено

може би нещо подобно, но и това не е решение, трябва да се случва в един preg_replace

[php]$test = str_replace('&nbsp;', '', $string);
$test = preg_replace('/(\r\n|\r|\n)+/', "</li>", $test)."\n";
$test = preg_replace("#&bull;#", "<li>", $test);
$test = preg_replace('/\s+/', ' ', $test);[/php]

Post Reply