无法匹配两个标签之间的字符串

时间:2015-01-27 14:39:35

标签: regex string

我正在尝试使用正则表达式匹配两个标记之间的字符串。一个标签有一个随机生成的数字,因此我无法找到一种方法来匹配两个标签之间的字符串。

所以我的html中有很少的字符串,每个字符串都有不同的名称。 您看到的数字是随机生成的。我试图获取每个字符串的名称

<a href="log.jsp?type=Agent&agentIDStr=26444">Amber</a></td>

正在使用的正则表达式

<a href="log\.jsp\?type=Agent&agentIDStr=.\d.+">(.*)</a>

遗憾的是,这与整个字符串匹配,而不仅仅是标记之间的名称。帮助赞赏 - 不是正则表达的忠实粉丝; /

3 个答案:

答案 0 :(得分:1)

我建议你改变你的正则表达式,如下所示。 \d+匹配一个或多个数字,(.*?)非贪婪地捕获零个或多个字符。

<a href="log\.jsp\?type=Agent&agentIDStr=\d+">(.*?)</a>

DEMO

答案 1 :(得分:1)

尝试简单的延迟加载,你的写入轨道,但显示一点贪婪,哈哈,所以尝试延迟加载。像这样

 <a href="log\.jsp\?type=Agent&agentIDStr=26444">(.*?)<\/a><\/td>

enter image description here

N.B: .*?匹配任何字符(换行符除外)

    Quantifier: *? Between zero and unlimited times, as few times as possible, expanding as needed [lazy]

见证: https://www.regex101.com/r/rA1bL5/1

更多信息: http://javascript.info/tutorial/greedy-and-lazy

答案 2 :(得分:0)

如果你使用PHP,最好不要使用正则表达式来捕获它:

$url = '<a href="log.jsp?type=Agent&agentIDStr=26444">Amber</a></td>';

$dom = new DOMDocument;
@$dom->loadHTML($url);

$link = $dom->getElementsByTagName('a')->item(0);
parse_str(parse_url($link->getAttribute('href'), PHP_URL_QUERY), $variables);

var_dump($variables); // ['type' => 'Agent', 'agentIDStr' => '26444']
var_dump($link->nodeValue); // Amber