试图在字符串中查找字符串

时间:2013-04-25 08:02:40

标签: regex

正则表达式的全新。 希望以前没有回答过。对不起,如果有。

我的问题是尝试从字符串中的字符串中获取名称。 不知道我是否把头包裹在最好的选择之中。 这是总字符串块的小提取

 <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 个答案:

答案 0 :(得分:0)

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

请参阅以下链接以获取参考:

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

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

答案 1 :(得分:0)

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

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

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

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

通常,最好通过两个步骤完成:

首先获取所需字符串的部分:

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

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

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

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

答案 2 :(得分: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>

action中查看并附带一些解释,并且不要忘记正则表达式修饰符。

答案 3 :(得分:0)

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

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