1

对正则表达式完全陌生。希望以前没有回答过这个问题。抱歉,如果有。

我的问题是尝试从字符串中的字符串中获取名称。不确定我是否已经为这个最好的选择感到困惑。这是从总字符串块中提取的一小部分

 <div class="txt-block" itemprop="contractors" itemscope
 itemtype="home"> 
                             <h4 class="inline">Employs:</h4> <a href="/.../" itemprop='url'><span class="itemprop"
 itemprop="name">Carp 1</span></a>,  <a href="/.../"
 itemprop='url'><span class="itemprop" itemprop="name">Carp
 2</span></a>,  <a href="/.../" itemprop='url'><span class="itemprop"
 itemprop="name">Carp 3</span></a>                          <span
 class="tots">|</span>
                           <span class="see-more inline"> <a href="/.../" itemprop='url'>See full options</a>                      
 </span>
                          </div>

我想提取“鲤鱼 1”、“鲤鱼 2”、“鲤鱼 3”。字符串长度因我要提取的项目数量而异。

也许还有更简单的方法可以做到这一点。感谢所有帮助。

4

4 回答 4

0

这不是正则表达式问题。您需要通过 HTML DOM 和 XPath 进行 html 解析。

请参阅这些链接以获取参考:

http://www.w3schools.com/xpath/xpath_syntax.asp

http://www.php.net/manual/en/domxpath.query.php

于 2013-04-25T08:06:42.513 回答
0

更新:这是在问题格式化之前发布的,以表明这是一个关于解析 HTML 的问题。

此正则表达式假定您正在解析纯文本字符串,例如:

Employs: carp1, carp2, carp3 | blah blah...

一般来说,您不应该使用正则表达式来解析 HTML。但是,如果您使用另一种方法首先删除所有 HTML 标记,则可以在生成的纯文本上使用这种方法。

通常,这最好通过两步过程来完成:

首先获取您想要的字符串部分:

my $carps;
if ($string =~ /Employs:\s*([^|]+)/)
{
    $carps = $1;
}

然后从匹配的部分中取出每个项目。如有必要,您可以使用正则表达式,但在这种情况下,看起来好像一个简单的拆分就足够了:

my @carps = split /,\s*/, $carps;

(以 Perl 为例,但这种方法应该适用于任何语言)。

于 2013-04-25T08:06:46.647 回答
0

使用一些 xml 解析器。对于示例程序,请使用以下链接

http://www.codeproject.com/Articles/4826/XML-File-Parsing-in-VB-NET

于 2013-04-25T08:35:14.727 回答
0

由于您要搜索的字符串包含在具有 class 和 item 属性的 span 标记之间: <span class="itemprop" itemprop="name">STRING</span>

您可以使用以下正则表达式:

<span.*?(?:itemprop\s*=\s*"\s*name\s*"\s*)?class\s*=\s*"\s*itemprop\s*"\s*(?:itemprop\s*=\s*"\s*name\s*"\s*)?>(.*?)<\/span>

通过一些解释查看它的实际效果,并且不要忘记正则表达式修饰符。

于 2013-04-25T08:15:25.360 回答