Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.226.187.24] |
|
Сообщ.
#1
,
|
|
|
У меня есть текст странички, который хранится в переменной $text. В нем есть форма, как мне считать все value из всех полей, причем так, чтобы это все валилось в переменную $a['имя параметра'], где имя параметра это name из этого input с учетом, что это name и value заключены в треугольные скобки < >. Для упрощения name всегда раньше value. У кого есть, что-нибудь подобное, то помогите плиз. Или кто знает как это сделать, а то у меня не получается.
|
Сообщ.
#2
,
|
|
|
На Perl это одной строчкой пишется, B)
а на вашем PHP строчек пять, наверное. %a=~m/<input.*?name\s*=\s*("[^"]*"|'[^']*').*?value\s*=\s*("[^"]*"|'[^']*').*?>/gi |
Сообщ.
#3
,
|
|
|
А как насчет
preg_match('<input.*?name\s*=\s*("[^"]*"|'[^']*').*?value\s*=\s*("[^"]*"|'[^']*').*?>', $text, $a); preg_match вроде как perl-совместимая функция? |
Сообщ.
#4
,
|
|
|
Trustmaster
Я сильно сомневаюсь. Даже если апострофы заэкранировать В Перле эта конструкция очень чувствительна к контексту и к модификатору 'g'. Например в скалярном контексте m// уже будет возращать true или false, а не список всех подшаблонов в нутри круглых скобок, как во втором посте. |
Сообщ.
#5
,
|
|
|
Вот эта регулярка выдает ошибочку, аля
Parse error: parse error in /pub/home/hsparta2/htdocs/enter.php on line 28 preg_match("<input.*?name\s*=\s*("[^"]*"|'[^']*').*?value\s*=\s*("[^"]*"|'[^']*').*?>", $page_text, $a); |
Сообщ.
#6
,
|
|
|
регексп в preg_match должен быть ограничен слева и справа, например слешами:
preg_match( "/регексп паттерн/", $string ); и перед двойными кавычками поставь \, раз у тебя вся строка в двойных кавычках. |
Сообщ.
#7
,
|
|
|
И так не хочет:
preg_match("/<input.*?name\s*=\s*(\"[^\"]*\"|'[^']*').*?value\s*=\s*(\"[^\"]*\"|'[^']*').*?>/", $page_text, $a); |
Сообщ.
#8
,
|
|
|
Спасибо проблема решилась разбиванием на несколько рег. выражений:
preg_match_all("/<input[^>]+>/",$page_text,$forms); $form = $forms[0]; $a = array(); foreach($form as $str) { //print("\n$str"); preg_match_all("/name=(\w+)/",$str,$tmp1); preg_match_all("/value=\"(.*)\"/",$str,$tmp2); $a[$tmp1[1][0]] = $tmp2[1][0]; } |