2013-04-25 64 views
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鯉魚」的小提取物。 字符串長度因我想要提取的項目數而異。

也許有更簡單的方法來做到這一點。 所有幫助表示讚賞。

+1

將關鍵字「鯉魚」將保持不變? – 2013-04-25 08:04:04

+1

不要在HTML中使用正則表達式。 – hsz 2013-04-25 08:04:59

+0

我建議使用Javascript來檢索''標籤中的文字。 – Aquillo 2013-04-25 08:05:24

回答

0

更新:此張貼問題被格式化,以表明它是一個關於解析HTML問題之前。

此正則表達式假設你解析一個純文本字符串,如:

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

一般來說,你不應該使用正則表達式來解析HTML。但是,如果您使用其他方法首先刪除所有HTML標記,則可以在得到的純文本上使用此方法。

一般情況下,這是最好的兩個步驟完成:

首先得到你想要的字符串部分:

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

然後得到每個項目進行匹配的部分。如有必要,可以使用正則表達式,但在這種情況下,它看起來好像簡單的拆分就足夠了:

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

(使用Perl作爲例子,但這種方法應該在任何語言工作)。

0

既然你正在尋找一個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以及一些解釋,並且不要忘記正則表達式修飾符。