1

我使用 NSRegularExpression 在 HTML 中查找包含 40 个字符的 ID 的出现

这是我的代码:

 - (NSString *)stripOutHttp:(NSString *)string {

NSLog(@"the page content :: %@", string);

// Setup an NSError object to catch any failures
NSError *error = NULL;

// create the NSRegularExpression object and initialize it with a pattern
// the pattern will match any http or https url, with option case insensitive

//search for:: <input type="hidden" name="XID" value="f3f3fbafe552358d9312d1fe30670add09adc36c" />


NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"<input type=\"hidden\" name=\"XID\" value\"?" options:NSRegularExpressionCaseInsensitive error:&error]; // ultimo funcional



// try /\b([a-f0-9]{40})\b/


// create an NSRange object using our regex object for the first match in the string 

NSRange rangeOfFirstMatch = [regex rangeOfFirstMatchInString:string options:0 range:NSMakeRange(0, [string length])];

// check that our NSRange object is not equal to range of NSNotFound

if (!NSEqualRanges(rangeOfFirstMatch, NSMakeRange(NSNotFound, 0))) {
    // Since we know that we found a match, get the substring from the parent string by using our NSRange object

    NSString *substringForFirstMatch = [string substringWithRange:rangeOfFirstMatch];

    NSLog(@"Extracted data : %@",substringForFirstMatch);

    // return the matching string
    return substringForFirstMatch;
}

return NULL;
  }

所以用我目前的正则表达式:

NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"<input type=\"hidden\" name=\"XID\" value\"?" options:NSRegularExpressionCaseInsensitive error:&error]; // ultimo funcional

我得到了我需要的一部分:

Extracted data : <input type="hidden" name="XID" value

现在如何获得任何 40 个字符值的响应?

我试过了

// try /\b([a-f0-9]{40})\b/

不过好像还没看懂怎么用

这是我之后的回应::

<input type="hidden" name="XID" value="f3f3fbafe552358d9312d1fe30670add09adc36c" />

多谢

4

2 回答 2

2

您应该考虑使用 html 或 xml 解析器(如 Blender 所说)解析整个内容,但现在,您的问题的答案如下:

 "<[^>]*id=DIVNAME.*?>(.*?)/>"
于 2012-12-19T08:19:39.077 回答
1

正则表达式

 <input type=\"hidden\" name=\"XID\" value=\"([a-f0-9]{40})\"[\s]*/>

应该匹配您的输入字符串

不过,我认为这不是最好的主意,一方面,您使用了很多空格,其中任意空格也是可能的。如果我是你,我会研究 html 解析器库。

于 2012-12-19T08:24:29.373 回答