Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Тексты > Регулярное выражение обработки текста


Автор: PriZraK 27.10.2006, 14:31
Здравствуйте.
Помогите разобраться:

Переменная $template_page содержит текст вида:
Код

$template_page="<b>Добро пожаловать</b> #:page_name:# 
бла-бла-бла #:page_content:# бла-бла-бла #:page_text:#";


Необходимо занести в массив значения (учтя тот факт, что значений в переменной $template_page может быть неограниченное количество):
#:page_name:#
#:page_content:#
#:page_text:#

Искал по форуму, пробовал, не выходит...



Автор: Vaulter 27.10.2006, 14:52
preg_match_all("!#smile[-a-Z_\/]*):#!s,....
чтото типа того. 
читать про 
preg_match_all на php.net
и вообще про регулярные выражения


Автор: korisarimi 27.10.2006, 15:39
Код

$template_page="<b>Добро пожаловать</b> #:page_name:# 
бла-бла-бла #:page_content:# бла-бла-бла #:page_text:#";

$template_page=ereg_replace("([^#]+)(#[^#]+#)","\\2 ",$template_page);
$massive=split(" ",$template_page);/*$massive - это массив, в который заносятся все элементы*/


Автор: PriZraK 27.10.2006, 16:29
korisarimi
Код действительно работает, так как надо...
Код

$template_page="<b>Добро пожаловать</b> #:page_name:# 
бла-бла-бла #:page_content:# бла-бла-бла #:page_text:#";
$template_page=ereg_replace("([^#]+)(#[^#]+#)","\\2 ",$template_page);
$massive=split(" ",$template_page);/*$massive - это массив, в который заносятся все элементы*/


...но, надо было мне сразу привести пример моего текста использующего в обработке:

Код

$template_page='<td width="700" height="391" bgcolor="#FFFFFF" valign="top" align="center" colspan="2">
  <table border="0" width="700" height="1" cellspacing="0" cellpadding="0">
    <tr>
      <td width="211" height="1" valign="top" rowspan="2">#:page_content_1:#<br>#:page_content_2:#</td>
      <td width="489" height="1" valign="top">#:page_content_3:#</td>

    </tr>
    <tr>
      <td width="489" height="1" valign="top">#:page_content_4:#</td>
    </tr>
  </table>';
$template_page=ereg_replace("([^#]+)(#[^#]+#)","\\2 ",$template_page);
$massive=split(" ",$template_page);
print $massive[0];

// выводит #FFFFFF"


Как в этом случае быть?

Автор: Vaulter 27.10.2006, 18:11
Код

preg_match_all("!#[-a-Z_\/]*?):#!s",$page, $matches);
print_r($matches);


Добавлено @ 18:12 
между [ и ] укажи еще какие символы входят в твои индификаторы.

Добавлено @ 18:14 
между [ и ] укажи еще какие символы входят в твои индификаторы.

Автор: PriZraK 27.10.2006, 19:40
Цитата(Vaulter @ 27.10.2006,  18:11)
Код

preg_match_all("!#[-a-Z_\/]*?):#!s",$page, $matches);
print_r($matches);

Выдаётся ошибка:
Warning: preg_match_all() [function.preg-match-all]: Compilation failed: range out of order in character class at offset 5

Автор: Vaulter 27.10.2006, 20:32
PriZraK, да, там скобочка не открыта
"!#([-a-Z_\/]*?):#!s"

Автор: PriZraK 27.10.2006, 23:29
Цитата(Vaulter @ 27.10.2006,  20:32)
PriZraK, да, там скобочка не открыта
"!#([-a-Z_\/]*?):#!s"

Уфф, спасибо большое, получилось!! =)
Код

preg_match_all("!#:([-a-zA-Z0-9_\/]*?):#!s",$page, $matches);
print_r($matches);

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)