Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/15: Рейтинг темы: голосов - 15, средняя оценка - 4.73
14 / 14 / 2
Регистрация: 09.05.2010
Сообщений: 79

Regex, html input value parsing

11.08.2010, 19:39. Показов 3070. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.
Как можно с помощью регулярок из HTML кода вычленить значение value у элемента input, с конкретным аттрибутом name?
Например:
Code
1
<input type="text" name="name1" value="value1" />
У меня получилось вот что:
Code
1
<input.+?name=["']name1["'].*?value=["'](.*?)["'].*?/>
Как можно переделать эту регулярку, чтобы она работала одновременно и в случае, когда переставлены аттрибуты name и value местами?
Code
1
<input type="text" value="value1" name="name1" />
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
11.08.2010, 19:39
Ответы с готовыми решениями:

парcинг html (regex)
Всем привет! Как с помощью регулярных выражений найти все ссылки в html странице вида: &lt;a...

Удаление комментариев HTML (Regex)
HTML = Regex.Replace(HTML, &quot;&lt;!--(.+?)--&gt;&quot;, string.Empty, RegexOptions.IgnoreCase); такой код удаляет комментарий такой: &lt;!-- Тра ля...

Regex для значения баланса из html
Тут у меня не получается парсить текста Вот код Regex regex = new Regex(&quot;&lt;div &lt;/div&gt;&quot;); MatchCollection matches =...

6
Padawan
 Аватар для Johnny_D
473 / 323 / 30
Регистрация: 30.01.2010
Сообщений: 1,841
12.08.2010, 00:52
чем вас не устраивает
Code
1
(type|name|value)="(\w*)"
0
14 / 14 / 2
Регистрация: 09.05.2010
Сообщений: 79
12.08.2010, 01:19  [ТС]
Это не подходит, будет выбирать все типы, значения и имена по отдельности.
А мне нужно выбрать из всего кода конкретный INPUT элемент (с известным значением аттрибута Name) и выдернуть значение Value.
0
125 / 123 / 0
Регистрация: 30.03.2009
Сообщений: 766
12.08.2010, 03:13
Если не заниматься поиском красивого и всегда верного решения, то можно сначала найти все вхождения input-а с нужным name:
Code
1
<input.+name=["']name1["'].*/>
А потом оттуда уже вытащить value

Если делать все "по-олипиадному", чтобы работало всегда корректно, регулярка получится сложная. К примеру, твое выражение
Code
1
<input.+?name=["']name1["'].*?value=["'](.*?)["'].*?/>
уже содержит ошибку, потому что оно выдаст соотвествие на <input name="name1' value='fuck you!'" />, здесь имя не "name1", а "name1' value='fuck you!'", приемлемое даже с точки зрение IE =)

P.S. Кто-нмть знает, как делать просмотр вперед и назад на .Net-овских регулярках?
0
 Аватар для s-kvv
76 / 73 / 9
Регистрация: 09.06.2010
Сообщений: 206
13.08.2010, 09:02
Цитата Сообщение от Lolcht0 Посмотреть сообщение
P.S. Кто-нмть знает, как делать просмотр вперед и назад на .Net-овских регулярках?
C#
1
2
3
4
MatchCollection mc = Regex.Matches(input,pattern,RegexOptions.Multiline);
Match m = mc[i];// доступ по индексу ко всем совпадениям
m.Index; // Позиция в input начала совпадения
m.Length; // Длинна совпавшей строки
Добавлено через 4 часа 7 минут
Как можно переделать эту регулярку, чтобы она работала одновременно и в случае, когда переставлены аттрибуты name и value местами?
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
static void Main(string[] args)
        {
            string input = "<input type=\"text\" name=\"name1\" value=\"value1\" />"+
"<input type=\"text\" />"+
"<input name=\'name1\' type=\"text\" value=\'value1\' />"+
"<input type=\"text\" value=\"value1\" name=\"name1\" />"+
"<input type=\"text\" name=\"name1\" value=\"value1\"  value=\"value1\" />"+
"<input type=\"text\" name=\'name1\' value=\"value1\" />";
            
            string pattern = "<input\\s+((?<atr1>\\w+)\\s*=\\s*(?<sep1>[\"\'])(?<val1>.*?)\\k<sep1>)"+     
                            "\\s*((?<atr2>\\w+)\\s*=\\s*(?<sep2>[\"\'])(?<val2>.*?)\\k<sep2>)?"+
                            "\\s*((?<atr3>\\w+)\\s*=\\s*(?<sep3>[\"\'])(?<val3>.*?)\\k<sep3>)?"+
                            "\\s*((?<atr4>\\w+)\\s*=\\s*(?<sep4>[\"\'])(?<val4>.*?)\\k<sep4>)?"+
                            "\\s*((?<atr5>\\w+)\\s*=\\s*(?<sep5>[\"\'])(?<val5>.*?)\\k<sep5>)?"+
                            "\\s*((?<atr6>\\w+)\\s*=\\s*(?<sep6>[\"\'])(?<val6>.*?)\\k<sep6>)?" +
                            "\\s*/>";
            
            MatchCollection mc = Regex.Matches(input,pattern,RegexOptions.Multiline | RegexOptions.IgnoreCase);
 
            foreach (Match m in mc)
            {
                if (m.Success)
                {
                    Console.WriteLine("-------------------------------------");
                    for (int i = 1; i < 6; i++)
                    {
                        string atr = "atr" + i.ToString();
                        string val = "val" + i.ToString();
                        if (m.Groups[atr].ToString() != "" && m.Groups[val].ToString() != "")
                            // m.Groups[atr] - атрибут, m.Groups[val] - его значение без открывающих
                            // и закрывающих ковычек. Учитываются как двойные так и одинарные ковычки
                            Console.WriteLine("atr = {0}, val = {1}", m.Groups[atr], m.Groups[val]);
                    }
                }
            }
 
            Console.ReadKey();
        }
Пример. До шести атрибутов в каждом <input>. Уменьшить и увеличить число аттрибутов не должно вызвать проблемы
1
16 / 16 / 3
Регистрация: 19.11.2009
Сообщений: 112
14.08.2010, 22:05
Что означает \\ например здесь:
<input\\s+
0
 Аватар для s-kvv
76 / 73 / 9
Регистрация: 09.06.2010
Сообщений: 206
15.08.2010, 06:50
Цитата Сообщение от vadim1111 Посмотреть сообщение
Что означает \\ например здесь:
<input\\s+
"\\" - знак "\", а так не компилируется:

C#
1
2
3
4
5
6
7
string pattern = @"<input\s+((?<atr1>\w+)\s*=\s*(?<sep1>["'])(?<val1>.*?)\k<sep1>)" +
                            "\s*((?<atr2>\w+)\s*=\s*(?<sep2>["'])(?<val2>.*?)\k<sep2>)?" +
                            "\s*((?<atr3>\w+)\s*=\s*(?<sep3>["'])(?<val3>.*?)\k<sep3>)?" +
                            "\s*((?<atr4>\w+)\s*=\s*(?<sep4>["'])(?<val4>.*?)\k<sep4>)?" +
                            "\s*((?<atr5>\w+)\s*=\s*(?<sep5>["'])(?<val5>.*?)\k<sep5>)?" +
                            "\s*((?<atr6>\w+)\s*=\s*(?<sep6>["'])(?<val6>.*?)\k<sep6>)?" +
                            "\s*/>";
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.08.2010, 06:50
Помогаю со студенческими работами здесь

C# как правильно раставить галочки при html parsing
Проблема в том что не знаю как поставить галочки правильно. Вот например как бы вы поставили галочки правильно: string pattern =...

Получить значение input value через Regex
Всем привет! Есть input: &lt;input id=&quot;pie&quot; value=&quot;dfgdfgdfg312&quot;/&gt; Как с помощью регулярки получить значение внутри value? Так не...

RegEx для парсинга HTML
Доброго времени суток. Изучаю RegEx и дело дошло до парсинга HTML. В HTML имеются строки вида: &lt;lon key=&quot;003.1211B8&quot;...

Regex найти слово в HTML
Есть исходный код страницы &lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt; &lt;rss version=&quot;2.0&quot;&gt;&lt;channel&gt;&lt;title&gt;Cinemate &amp;gt; Последние...

RegEx: Определить значение тега Title HTML-страницы
Господа, добрый вечер. Прошу помочь в одной функции: Подключаю System.Net и System.Text.RegularExpressions. Далее мне необходимо в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка SDL3 и Box2D из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru