正则表达式从HTML标记内部提取文本

时间:2012-06-19 21:25:51

标签: html regex

我知道这已被问到至少一千次,但我找不到一个与此字符串中的名称匹配的正确正则表达式:

<td><div id="topbarUserName">Donald</div></td>

我想得到'唐纳德'的名字,最接近的正则表达式是&gt; [a-zA-Z0-9] +,但结果是&gt;唐纳德。

我在PureBasic中编码(它的语法类似于Basic),它使用PCRE库来表示正则表达式。

有人可以帮忙吗?

4 个答案:

答案 0 :(得分:3)

如果你只使用编号组而不是整场比赛,那么Josh的模式会起作用。如果您必须使用整个匹配,请使用(?<=>)(\w+?)(?=<)

之类的内容

无论哪种方式,众所周知正则表达式不适合解析HTML。

说明: (?<=)用于检查当前项目之前是否出现了某些内容。 \w+?会匹配任何&#34;字&#34; -character,一次或多次,但只要模式的其余部分匹配某些内容就停止,对于这种情况,?可能被遗漏了。 (?=)用于检查当前项目后是否显示某些内容。

答案 1 :(得分:1)

试试这个

它应该捕获任何字母/数字

>([\w]+)<

此外,我不确定您的项目限制是什么,但这样做会更容易

$('#topbarUserName').text();

在jQuery中而不是使用正则表达式。

答案 2 :(得分:1)

>([a-zA-Z]+)应该做伎俩。记得让分组正确。

答案 3 :(得分:0)

为什么不用普通的旧基本字符串函数来做呢?

a.w = FindString(HTMLstring.s, "topbarUserName") + 16 ; 2 for "> and topbar...
If a > 0
b.w = FindString(HTMLstring, "<", a)
If b > 0
c.w = b - a
Donald.s = Mid(HTMLstring,a, c)
EndIf
EndIf
Debug Donald