Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Получение значения value поля input по name 
:(
    Опции темы
arsenium
Дата 25.10.2009, 19:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 14.5.2009

Репутация: нет
Всего: нет



Помогите разобраться с составлением регулярного выражения для получения значения параметра value.

К примеру, у нас есть html страничка, в коде которой есть строчка:

Код

 <input type="hidden" name="test" value="84ee5255089db9a4" /> 
 

нужно получить: 84ee5255089db9a4


C регулярными выражениями я еще на выsmile

пробовал по аналогии : http://forum.vingrad.ru/topic-162576.html
Цитата

Код

Regex.Match(s, "<table name=\"two\" value=[^>]*>");



делал так:

Код

Regex.Match(s, "<input type=\"hidden\" name=\"test\" value=[^>]*>")

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

Код

Regex.Match(s, "(?i)<input type=\"hidden\" name=\"test\" value=(['"]?)([+-]?\d+)\1>")

тоже ничего не вышло.

Подскажите пожалуйста, как составить правильное регулярное выражение.



Это сообщение отредактировал(а) arsenium - 25.10.2009, 20:08
PM MAIL   Вверх
diadiavova
Дата 25.10.2009, 19:59 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 31
Всего: 142



Код

            string input = @"<input type=""hidden"" name=""test"" value=""84ee5255089db9a4"" /> ";
            Regex re = new Regex(@"(?<=value="")[^""]*(?="")");
            Console.WriteLine(re.Match(input).Value);
            Console.ReadKey();

То есть инымис ловами само выражение выглядит так
Код

(?<=value=")[^"]*(?=")



--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
arsenium
Дата 25.10.2009, 20:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 14.5.2009

Репутация: нет
Всего: нет



Цитата(diadiavova @ 25.10.2009,  19:59)
Код

            string input = @"<input type=""hidden"" name=""test"" value=""84ee5255089db9a4"" /> ";
            Regex re = new Regex(@"(?<=value="")[^""]*(?="")");
            Console.WriteLine(re.Match(input).Value);
            Console.ReadKey();

То есть инымис ловами само выражение выглядит так
Код

(?<=value=")[^"]*(?=")

Извиняюсь, что сразу неуточнил, что эта строчка
Код

<input type="hidden" name="test" value="84ee5255089db9a4" /> 

находится где-то в коде html страничке.
т.е. input полей может быть несколько. а нужно найти именно с name="test" и взять его значение value.


Это сообщение отредактировал(а) arsenium - 25.10.2009, 20:14
PM MAIL   Вверх
diadiavova
Дата 25.10.2009, 20:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 31
Всего: 142



Значит сначала надо вытащить саму строчку
Код

(?<start><input)[.\n]*(?<end-start>>)

Попробуй так, заново студию неохота запускать. В принципе если бы сразу сказал, то можно было бы сделать так, чтобы сразу все вхождения вытащить.

Хотя проще наверно так
Код

<input[^>]*>


Это сообщение отредактировал(а) diadiavova - 25.10.2009, 20:21


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
arsenium
Дата 25.10.2009, 20:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 14.5.2009

Репутация: нет
Всего: нет



Цитата(diadiavova @ 25.10.2009,  20:15)

Код

(?<start><input)[.\n]*(?<end-start>>)


Код

<input[^>]*>

По первому почему-то не видит.
По второму видит, но так он будет брать любую строчку с input.
Хотелось бы вытащить только input c именем "test"
PM MAIL   Вверх
diadiavova
Дата 25.10.2009, 20:30 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 31
Всего: 142



arsenium, по первому варианту я сначала пропустил квантификатор, потом исправил.

Добавлено через 2 минуты и 5 секунд
Цитата(arsenium @  25.10.2009,  20:26 Найти цитируемый пост)
Хотелось бы вытащить только input c именем "test" 

Лучше вытащит всё сразу, а потом проверять наличие соответствующего атрибута. Код будет проще.

Добавлено через 3 минуты и 45 секунд
Определить присутствует ли в строке тот или иной атрибут можно по шаблону из первого моего поста. Только имя атрибута в шаблоне поменяй и проверь есть ли совпадения. 

Это сообщение отредактировал(а) diadiavova - 25.10.2009, 20:31


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
arsenium
Дата 25.10.2009, 20:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 14.5.2009

Репутация: нет
Всего: нет



Странно, попробовал еще раз, как писал в первом посте:
Код

Regex.Match(s.ToString(), "<input type=\"hidden\" name=\"test\" value=[^>]*>");


И получилось вытащить всю строчку smile
Но вот теперь значение value вытащить не получается %)


Код

(?<=value="")[^""]*(?="")

Все получилось! Большое Спасибо!  smile

Это сообщение отредактировал(а) arsenium - 25.10.2009, 20:45
PM MAIL   Вверх
Georgich
Дата 8.10.2010, 11:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 105
Регистрация: 20.1.2008

Репутация: нет
Всего: нет



Приветствую.

Мне необходимо из HTML-файла получить значение value строки вида:
Код

<input id="input_link_1" value="http://s52.radikal.ru/i137/1010/94/a43b7a87c977.jpg" type="text" readonly="readonly" onclick="f2(this);" class="incode" />


В регулярках особо не разбираюсь. Помогите, пожалуйста.
PM MAIL   Вверх
Georgich
Дата 11.10.2010, 20:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 105
Регистрация: 20.1.2008

Репутация: нет
Всего: нет



Наткнулся на такую статью: http://laempresasabia.com/archives/345
Но при попытке записать регулярное выражение, появляется ошибка. Помогите, пожалуйста.
PM MAIL   Вверх
jonie
Дата 11.10.2010, 20:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 22
Всего: 118



Georgich, плохая статья. Читайте книжки классиков вроде Джеффри Фриддл. Регулярные выражения.

вот ваша регулярка.
Код

<input.+?value="(.+?)"



--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
Georgich
Дата 11.10.2010, 21:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 105
Регистрация: 20.1.2008

Репутация: нет
Всего: нет



Спасибо.
Хотелось бы узнать, что вернет это выражение и как его использовать в коде?
PM MAIL   Вверх
Georgich
Дата 12.10.2010, 09:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 105
Регистрация: 20.1.2008

Репутация: нет
Всего: нет



jonie, это выражение работает как-то не совсем так, как хотелось бы. Оно находит первый попавшийся input, а не тот, который нужно найти по id. В итоге для решения моей задачи был реализован следующий код:
Код

...
string txt = myStreamReader.ReadToEnd();
Match res = Regex.Match(txt, "<input [^>]*id=\"input_link_1\"[^>]*value=\"(?<Value>[^\"]+)\"[^>]+/>");
if (res.Success)
{
       imageURL = res.Groups[1].Value;
       return imageURL;
}
 else
       return imageURL = String.Empty;

PM MAIL   Вверх
crz
Дата 12.10.2010, 10:51 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 1.6.2007

Репутация: нет
Всего: 1



Имхо, парсить HTML с помощью регулярных выражений это плохая идея. Лучше воспользоваться библиотекой Html Agility Pack, и получать нужные элементы (значения элементов) с помощью xpath-like запросов
Код

 HtmlDocument doc = new HtmlDocument();
 doc.Load("file.htm");
 foreach(HtmlNode link in doc.DocumentElement.SelectNodes("//a[@href"])
 {
    HtmlAttribute att = link["href"];
    att.Value = FixLink(att);
 }
 doc.Save("file.htm");


PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0534 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.