|
|
|
| Подскажите как найти в тексте все блоки состоящие из
с помощью регулярного выражения,
пробовал
$pattern='|<?php(.*)?>|is';
preg_match($pattern,$string,$s);
|
чёт выдает не то что надо...помогите. | |
|
|
|
|
|
|
|
для: Alph[p]a
(24.08.2007 в 15:51)
| | Знак вопроса нужно экранировать: /? | |
|
|
|
|
|
|
|
для: Alph[p]a
(24.08.2007 в 15:51)
| | Нужно экранировать вопросы. И жадность поменять.
|<\?php(.*?)\?>|is | |
|
|
|
|
|
|
|
для: kasmanaft
(24.08.2007 в 16:01)
| |
<?php
$text="
Тут php код:
<?php
# комментарий к первой части
echo 'Вот это будет напечатано';
# комментарий
echo '---';
?>
Далее идет просто текст..
а затем снова код
<?php
# еще комментарий
echo 'вот это да!';
# комментарий ко второй части
?>
ну и конец";
$text=htmlspecialchars($text);
$pattern='|<\?php(.*?)\?>|is';
preg_match($pattern,$text,$s);
echo '<pre>';
print_r($s);
echo '</pre>';
?>
|
результат
( | |
|
|
|
|
|
|
|
для: Alph[p]a
(24.08.2007 в 16:12)
| |
<pre>
<?php
$string="Тут php код:
<?php
# комментарий к первой части
echo 'Вот это будет напечатано';
# комментарий
echo '---';
?>
Далее идет просто текст..
а затем снова код
<?php
# еще комментарий
echo 'вот это да!';
# комментарий ко второй части
?>
ну и конец";
preg_match_all("/<\?php([^\?>]*)\?>/is",$string,$s);
print_r ($s);
?>
|
| |
|
|
|
|
|
|
|
для: Alph[p]a
(24.08.2007 в 16:12)
| | 1. Зачем htmlspecialchars() ? В таком случае в тексте нужно искать не "<?php", а "<?php".. ну и т.д.
2. Нужно использовать preg_match_all, а из регекспа убрать круглые скобки..
2Faraon
[^\?>] - означает не именно "?>", а "не ? или не >" | |
|
|
|
|
|
|
|
для: kasmanaft
(24.08.2007 в 16:52)
| | совсем забыл про htmlspecialcahrs()...
а вообще спасибо... воспользуюсь случаем задам ещ0 вопрос ,
<pre>
<?php
$string="Тут php код:
<?php
# комментарий к первой части
echo 'Вот это будет напечатано';
# комментарий
echo '---';
?>
Далее идет просто текст..
а затем снова код
<?php
# еще комментарий
echo 'вот это да!';
# комментарий ко второй части
?>
ну и конец";
preg_match_all("/<\?php([^\?>]*)\?>/is",$string,$s);
for ($i=0;$i<sizeof($s);$i++)
{
$result.=highlight_string('<?php'.$s[1][$i].'?>',true);
}
echo $result;
?>
</pre>
|
все прекрасно подсвечивается но как вывести весь текст (вместе с кодом) а не только код...помогите...... | |
|
|
|
|
|
|
|
для: Alph[p]a
(24.08.2007 в 17:24)
| | Наверное "echo preg_replace("/<\?php.*?\?>/ise", "highlight_string('\\0', 1);", $string);"
PS вот это "/<\?php([^\?>]*)\?>/is" лучше не использовать. | |
|
|
|
|
|
|
|
для: kasmanaft
(24.08.2007 в 18:10)
| | спасибо,
а чего тогда я парался ...очередной раз подтверждается истина - все гениальное и просто... и напрашивается вывод - учите регулярные выражения . | |
|
|
|
|
|
|
|
для: Alph[p]a
(24.08.2007 в 22:56)
| | не буду плодить темы.....но опять прошу помощи...
дело обстоит так...например добавляю в базу вот такой текст
Тест тест тест тест тест тест тест тест тест тест тест тест тест
<?php
function post_work_up($postbody)
{
// Обрабатываем теги [code],
|
$text = "
";
$lastocc = 0;
$sndocc = 1;
$result = "";
while($sndocc)
{
$fstocc = strpos($postbody,"[code]",$lastocc);
$sndocc = strpos($postbody,"
| ",$fstocc);
if(($fstocc>0 && $sndocc>0 && $lastocc>0) || ($fstocc >= 0 && $sndocc>0 && $lastocc == 0))
{
$result .= nl2br(htmlspecialchars(substr($postbody,$lastocc,$fstocc - $lastocc)));
$result .= "<table border=0 ><tr><td class=codeblock>".highlight_string(substr($postbody,$fstocc + 6,$sndocc - $fstocc - 6),true)."</td></tr></table>";
$lastocc = $sndocc + 7;
}
else
{
$result .= nl2br(htmlspecialchars(substr($postbody,$lastocc,strlen($postbody)-$lastocc)));
break;
}
}
$postbody = $result;
$postbody = str_replace("","<b>",$postbody);
$postbody = str_replace("","</b>",$postbody);
$postbody = str_replace("","<i>",$postbody);
$postbody = str_replace("","</i>",$postbody);
$postbody = str_replace("`","'",$postbody);
return $postbody;
}
?>
Тест тест тест тест тест тест тест тест тест тест тест тест тест
[/code]
вывожу так вот кусок кода:
$pars=$art['article'];
$pars=preg_replace("/<\?php.*?\?>/ise", "highlight_string('\\0', 1);", $pars);
$pars=str_replace('<?php','<div class=code><?php',$pars);
$pars=str_replace('?>','?></div>',$pars);
echo nl2br($pars);
|
всё нормально если код простой, но в нашем случае в вывод получаю это
Тест тест тест тест тест тест тест тест тест тест тест тест тест
<?php
function post_work_up($postbody)
{
// Обрабатываем теги [code],
|
$text =
Warning: Unexpected character in input: '\' (ASCII=92) state=1 in F:\web\apache\Apache2\htdocs\pm\library\library.php(149) : regexp code on line 33
"
\";
$lastocc = 0;
$sndocc = 1;
$result = \"\";
while($sndocc)
.........................
|
вопрос:
что это
Warning: Unexpected character in input: '\' (ASCII=92) state=1 in
|
и как избежать этого?
p.s и если например в коде будут присутствовть ещо php теги то тоже будут проблемы, вообще не понимаю....( | |
|
|
|
|
|
|
|
для: Alph[p]a
(25.08.2007 в 15:08)
| | ^ | |
|
|
|
|
|
|
|
для: Alph[p]a
(26.08.2007 в 09:58)
| | Интересный у Вас код - $result = \"\"; | |
|
|
|
|
|
|
|
для: Unkind
(26.08.2007 в 11:35)
| | а это не мой код.....это кусок кода из этого форума...)
ну так что сделать чтоб
Warning: Unexpected character in input: '\' (ASCII=92) state=1 in
|
небыло... | |
|
|
|
|
|
|
|
для: Alph[p]a
(26.08.2007 в 12:32)
| | C бекслешами код и был, значит? | |
|
|
|
|
|
|
|
для: Unkind
(26.08.2007 в 13:09)
| | Вот код ошибки
Warning: Unexpected character in input: '\' (ASCII=92) state=1 in F:\web\xxx\library.php(149) : regexp code on line 33
|
на 149 строке
$pars=preg_replace("/<\?php.*?\?>/ise", "highlight_string('\\0', 1);", $pars);
|
мож тут что с кавычками? | |
|
|
|
|
|
|
|
для: Alph[p]a
(26.08.2007 в 13:32)
| | ну посмотрите
<?php
$text='
<?php
$text = "[code]";
?>
';
$text=preg_replace("/<\?php.*?\?>/ise", "highlight_string('\\0', 1);", $text);
echo $text;
?>
|
результат
<?php
$text =
Warning: Unexpected character in input: '\' (ASCII=92) state=1 in F:\web\apache\Apache2\htdocs\001002.php(8) : regexp code on line 3
"[code]\";
?>
ну незнаю что и делать(((
| |
|
|
|
|
|
|
|
для: Alph[p]a
(26.08.2007 в 15:09)
| | Действительно. Что за ерунда.
<?php
header("Content-type: text/plain; charset=utf-8");
var_dump(preg_replace('/.*/se', "'\\0'", 'String with "double quotes"'));
?>
|
P.S. Ваш код у меня выводит все нормально, за исключением двойной кавычки, которую почему-то обработчик RegEx эскейпирует. | |
|
|
|
|
|
|
|
для: Unkind
(26.08.2007 в 15:59)
| | что-ж делать-то тогда? ЛЮДИ ПОМОГИТЕ! плиз........... | |
|
|
|
|
|
|
|
для: Unkind
(26.08.2007 в 15:59)
| | Кстати, да. Когда-то с этим сталкивался, да забыл.
Если вот так сделать, то будет без бэкслешей:
preg_replace('/.*/se', '"\\0"', 'String with "double quotes"')
|
Кавычки/апострофы местами поменяли.
Наверное, и там нужно сделать 'highlight_string("\\0", 1);'
PS а "Warning: Unexpected character in input" у меня тоже не наблюдается.
UPD Интересно. Так вообще ерунда какая-то выводится. Какбудто highlight_string() вызывается без второго аргумента. Видимо придется использовать preg_replace_callback
function func($regs) {
return highlight_string($regs[0], 1);
}
$text=preg_replace_callback("/<\?php.*?\?>/is", "func", $text);
|
| |
|
|
|
|
|
|
|
для: kasmanaft
(26.08.2007 в 18:46)
| | ваУ !...... работатает) спасибо....блин и как только люди додумываються до токого)))
p.s странно пишу все это дело Zend Development Environment но там "func" не подсвечивается...как будто как строка......блин как задолбали все эти кавычки, и экранирование.....kasmanaft большое спасибо. | |
|
|
|