C # RegEx, чтобы найти токен в источнике

1

Мне нужна помощь от кого-то, у кого больше знаний в Регулярных выражениях, чем у меня. Моя проблема заключается в том, что вы хотите POST-форму, но для этого вам нужно "reloadToken", она должна быть опубликована. ReloadToken можно найти в источнике страницы в скрытом значении, например:

<input type="hidden" name="reloadToken" value="80c52d77d3e2eeb32fac3a6940ab6cc4" />

Значение reloadToken изменяет каждую pageload, теперь я отправляю запрос GET и сохраняю исходный код в переменной, с регулярным выражением я должен иметь возможность искать источник для reloadToken, но мои знания о регулярном выражении близки к нулю.

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

Там еще одна вещь, есть больше reloadToken в sourceource, однако все они имеют одинаковое значение, так что это не имеет значения?

Заранее спасибо.

Теги:

3 ответа

1
Лучший ответ

Что другие ответы забывают, так это то, что вы работаете на С#, у которого есть собственные escape- escapes компилятора, большинство из которых зеркалируются в Regex.

Их шаблоны могут работать, но вы будете бороться с синтаксическими анализаторами С# из двойных кавычек, прежде чем они попадут в регулярное выражение, и это может повредить шаблон, который приведет к сбою.

Ниже в моем шаблоне я покажу, как использовать литеральный escape @ в С# для отправки шаблона с неулучшенным текстом в парсер в С#:

string data="<input type=\"hidden\" name=\"reloadToken\" value=\"80c52d77d3e2eeb32fac3a6940ab6cc4\"";

string pattern=@"(?:reloadToken.+value="")(?<Token>[^\""]+)";

Console.WriteLine (

   Regex.Match(data, pattern)
        .Groups["Token"]
        .Value);

// Output
// 80c52d77d3e2eeb32fac3a6940ab6cc4

В противном случае шаблон говорит

  • (?:... ) - Сопоставьте, но не фиксируйте определенный набор текста. Текст, который нам не нужно фиксировать или сопоставлять, это просто текст привязки; см. следующий...
  • reloadToken.+value="" - Фактический текст "перезагрузить токен", тогда мы собираемся съесть общее пространство, указав . который говорит что-либо. Но мы хотим сопоставить более одного, поэтому добавим + что означает 1 - много раз. Таким образом, пространство будет съедено до буквального value=".

  • (?<Token>...) - ( to ) говорит, что это совпадающая группа. Имя ?<xxx> называет группу соответствия. В нашем случае наша матчевая группа будет называться "Token", которая позволит нам извлечь ее из match capture group (термин регулярного выражения) позже этим именем вместо индекса.

  • [^\""]+ - [ to ] говорит, что это определение множества. В нашем множестве определения мы говорим ^ нет никаких " кавычки. Поэтому мы хотим, чтобы соответствовать ничего, кроме цитаты и, наконец, мы говорим, наша группа матч может быть подобран + 1 или больше символов. Который будет останавливаться на первом ".

  • 0
    Спасибо, это решило мою проблему, теперь я получил reloadToken и могу продолжить мой проект.
  • 0
    @LethalNET Основой регулярных выражений являются ( ) и [ ] с . и + и * с остальными литералами или буквальными заменами в ситуациях возрастающей сложности. Изучение основ с помощью инструмента регулярных выражений, чтобы опробовать их, откроет множество различных ситуаций анализа / анализа символов. НТН
1

Вы можете поймать свою ценность reloadedToken с этим регулярным выражением:

/name="reloadToken" value="(\w*)"/

ДЕМО (посмотрите информацию о матче на правой панели)

Надеюсь, поможет.

0

Это должно сработать для вас. Значение, которое вы хотите получить, - это группа захвата, а остальное - нет.

(?:name="reloadToken" value=")([^"]*)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню