Выделить в переменную часть строки с помощью регулярного выражения

igrok54

Ищущий
Выделить в переменную часть строки с помощью регулярного выражения

Здравствуйте!

Верстаю шаблон для Drupal и столкнулся с проблемой:
Надо убрать со страницы дефолтную форму авторизации и прописать свою в нужном месте.
Затык в том, что:
1. форма вставлена в сайдбар, код которого передается в шаблон одной переменной $right;
2. при авторизации в форму авторизации вставляется ключ. Его надо перенести в свою форму.

Для этого думаю сделать так:
1. Получение ключа - решено. Отпарсить в отдельную переменную регулярным выражением ключ из дефолтной формы - регулярку составил, вот она: id.{2}form-([^"]*) - ключ будет в $1.
2. Удаление со страницы дефолтной формы. Далее надо с помощью регулярного выражения записать в переменную строку только с формой.
Вот тут у меня тормоз.
Начало регулярки понятно, вполне сработает - (<form action.{4}q.admin.settings.performance&destination
а вот чтобы отпарсило до тега, закрывающего форму </form> никак не могу дописать.:confused:

Содержание переменной $right:

<div id="block-user-0" class="block block-user">
<h2>Вход в систему</h2>

<div class="content">
<form action="/?q=admin/settings/performance&destination=admin%2Fsettings%2Fperformance" accept-charset="UTF-8" method="post" id="user-login-form">
<div><div class="form-item" id="edit-name-wrapper">
<label for="edit-name">Имя пользователя: <span class="form-required" title="Обязательное поле">*</span></label>
<input type="text" maxlength="60" name="name" id="edit-name" size="15" value="" class="form-text required" />
</div>
<div class="form-item" id="edit-pass-wrapper">
<label for="edit-pass">Пароль: <span class="form-required" title="Обязательное поле">*</span></label>
<input type="password" name="pass" id="edit-pass" maxlength="60" size="15" class="form-text required" />
</div>
<input type="submit" name="op" id="edit-submit" value="Вход в систему" class="form-submit" />
<div class="item-list"><ul><li class="first"><a href="/?q=user/register" title="Создать новую учетную запись пользователя.">Регистрация</a></li>
<li class="last"><a href="/?q=user/password" title="Получить новый пароль на e-mail.">Получить новый пароль</a></li>
</ul></div><input type="hidden" name="form_build_id" id="form-ba1eceb083847fe810d45c960c5f36bc" value="form-ba1eceb083847fe810d45c960c5f36bc" />
<input type="hidden" name="form_id" id="edit-user-login-block" value="user_login_block" />

</div></form>
</div>
</div>

Знатоки регулярных выражений, пожалуйста, помогите!
 

igrok54

Ищущий
Автор оригинала: tz-lom
а почему просто </form> не подходит?
Все, что между открывающим и закрывающим тегом form надо записать в переменную, конструкция:
<form action="/\?q=admin/settings/performance&destination[^</form>]*</form>
Не работает, так как в части [^</form>]* (предполагается значение: только не </form> сколько угодно ) ошибка, т.к. form толкуется как набор букв, а не слово.

Пока сделал в два этапа:
$toprep="<form action=";
$botrep="</form>";
$autform=ereg_replace("(.*)$toprep", "<form action=", $right); // Удаление всего, что до начала формы
$autform = ereg_replace("$botrep(.*)", "</form>", $autform); // Удаление всего, что после формы

В переменной $autform осталась вся форма авторизации:
<form action=
....
</form>
 

tz-lom

Продвинутый новичок
вообще строго говоря вы могли обойтись строковыми операциями(без регулярок)

но если всё таки нужна регулярка то это
Не работает, так как в части [^</form>]* (предполагается значение: только не </form> сколько угодно ) ошибка, т.к. form толкуется как набор букв, а не слово.
конечно верно,но я такого не предлагал, а вот что то такого вида:

<form action="/\?q=admin/settings/performance&destination.*?</form>

должно сработать
 

freeek

Новичок
PHP:
  $formtext = '<div id="block-user-0" class="block block-user">  <h2>Вход в систему</h2>    <div class="content">  <form action="/?q=admin/settings/performance&destination=admin%2Fsettings%2Fperformance" accept-charset="UTF-8" method="post" id="user-login-form">  <div><div class="form-item" id="edit-name-wrapper">  <label for="edit-name">Имя пользователя: <span class="form-required" title="Обязательное поле">*</span></label>  <input type="text" maxlength="60" name="name" id="edit-name" size="15" value="" class="form-text required" />  </div>  <div class="form-item" id="edit-pass-wrapper">  <label for="edit-pass">Пароль: <span class="form-required" title="Обязательное поле">*</span></label>  <input type="password" name="pass" id="edit-pass" maxlength="60" size="15" class="form-text required" />  </div>  <input type="submit" name="op" id="edit-submit" value="Вход в систему" class="form-submit" />  <div id="block-user-0" class="block block-user">  <h2>Вход в систему</h2>    <div class="content">  <form action="/?q=admin/settings/performance&destination=admin%2Fsettings%2Fperformance" accept-charset="UTF-8" method="post" id="user-login-form">  <div><div class="form-item" id="edit-name-wrapper">  <label for="edit-name">Имя пользователя: <span class="form-required" title="Обязательное поле">*</span></label>  <input type="text" maxlength="60" name="name" id="edit-name" size="15" value="" class="form-text required" />  </div>  <div class="form-item" id="edit-pass-wrapper">  <label for="edit-pass">Пароль: <span class="form-required" title="Обязательное поле">*</span></label>  <input type="password" name="pass" id="edit-pass" maxlength="60" size="15" class="form-text required" />  </div>  <input type="submit" name="op" id="edit-submit" value="Вход в систему" class="form-submit" />  <div id="block-user-0" class="block block-user">  <h2>Вход в систему</h2>    <div class="content">  <form action="/?q=admin/settings/performance&destination=admin%2Fsettings%2Fperformance" accept-charset="UTF-8" method="post" id="user-login-form">  <div><div class="form-item" id="edit-name-wrapper">  <label for="edit-name">Имя пользователя: <span class="form-required" title="Обязательное поле">*</span></label>  <input type="text" maxlength="60" name="name" id="edit-name" size="15" value="" class="form-text required" />  </div>  <div class="form-item" id="edit-pass-wrapper">  <label for="edit-pass">Пароль: <span class="form-required" title="Обязательное поле">*</span></label>  <input type="password" name="pass" id="edit-pass" maxlength="60" size="15" class="form-text required" />  </div>  <input type="submit" name="op" id="edit-submit" value="Вход в систему" class="form-submit" />  <div class="item-list"><ul><li class="first"><a href="/?q=user/register" title="Создать новую учетную запись пользователя.">Регистрация</a></li>  <li class="last"><a href="/?q=user/password" title="Получить новый пароль на e-mail.">Получить новый пароль</a></li>  </ul></div><input type="hidden" name="form_build_id" id="form-ba1eceb083847fe810d45c960c5f36bc" value="form-ba1eceb083847fe810d45c960c5f36bc" />  <input type="hidden" name="form_id" id="edit-user-login-block" value="user_login_block" />    </div></form>  </div>  </div>'; 

preg_match( '%\<form.*(?=form\>)form\>%isU', $formtext, $match );    

echo '<pre>';    
print_r( $match );    
echo '</pre>';
-~{}~ 29.06.10 14:17:

там лишний пробел в утверждении, после закрывающего тега
 

igrok54

Ищущий
tz-lom, freeek - спасибо.
freeek - Ваш вариант - то, что надо, сенкс!
Вопрос решен.
 
Сверху