.NET Regex вопрос - PullRequest
       1

.NET Regex вопрос

1 голос
/ 23 февраля 2011

Я пытаюсь разобрать некоторые данные с сайта.Проблема в том, что JavaScript генерирует данные, поэтому я не могу использовать для этого анализатор HTML.Строка внутри источника выглядит следующим образом:

<a href="http:www.domain.compid.php?id=123">

Все константно, кроме идентификатора, который следует после =.Я не знаю, сколько раз строка будет встречаться.Буду признателен за любую помощь и объяснение на примере регулярного выражения, если это возможно.

Ответы [ 2 ]

2 голосов
/ 23 февраля 2011

Вам нужно сохранить что-нибудь из этого? Регулярное выражение href="[^"]+"> будет соответствовать всей строке. Если вам нужно сохранить определенную часть, дайте мне знать.

РЕДАКТИРОВАТЬ: чтобы сохранить идентификатор, запишите пареню после id=, что означает захватить его. Затем, чтобы получить его, используйте поле Группы объекта сопоставления.

string source = "a href=\"http:www.domain.compid.php?id=123\">";
Regex re = new Regex("href=\"[^\"]+id=([^\"]+)\">");

Match match = re.Match(source);
if(match.Success)
{
    Console.WriteLine("It's a match!\nI found:{0}", match.Groups[0].Value);
    Console.WriteLine("And the id is {0}", match.Groups[1].Value);
}

РЕДАКТИРОВАТЬ: пример использования MatchCollection

MatchCollection mc = re.Matches(source);

foreach(Match m in mc)
{
    //do the same as above. except use "m" instead of "match"
    //though you don't have to check for success in each m match object 
    //since it wouldn't have been added to the MatchCollection if it wasn't a match
}
0 голосов
/ 23 февраля 2011

Это выполняет синтаксический анализ в javascript и создает строку csv:

var re = /<a href="http:www.domain.compid.php\?id=(\d+)">/;
var source = document.body.innerHTML;
var result = "result: ";

var match = re(source);
while (match != null) {
    result += match[1] + ",";
    source = source.substring(match.index + match[0].length);
    match = re(source);
}

Demo .Если html-контент не используется для чего-либо еще на сервере, этого должно быть достаточно для отправки идентификаторов.

EDIT , для производительности и надежности, вероятно, лучше использовать встроенные функции javascript-функций(или jQuery), чтобы найти URL-адреса вместо поиска по всему содержимому:

var re = /www.domain.compid.php\?id=(\d+)/;
var as = document.getElementsByTagName('a');    
var result = "result: ";

for (var i = 0; i < as.length; i++) {
    var match = re(as[i].getAttribute('href'));
    if (match != null) {
        result += match[1] + ",";
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...