2010-01-08 711 views
0

我想找到第二個<BR>標記並從此處開始搜索。我如何使用正則表達式來做到這一點?正則表達式:從第二個開始

<BR>like <BR>Abdurrahman<BR><SMALL>Fathers Name</SMALL> 

alt text

alt text

+0

謝謝你大衛。因爲我早早醒來:) – uzay95 2010-01-08 07:31:55

回答

1

前面加上<BR>[^<]*(?=<BR>)你的正則表達式,或者如果你想第二<BR>後開始,如刪除先行部分:<BR>[^<]*<BR>。第二<BR>之後,但在第三

查找文字:<BR>[^<]*<BR>([^<]*)<BR>

這個發現「金都」的<BR>404<BR>waldo<BR>

注:我專門用於上述代替非貪婪.*?因爲一旦上述開始不爲你工作,你應該stop parsing HTML with regex,並且當這種情況發生.*?將隱藏。然而,非貪婪的量詞也沒有得到很好的支持,如果你願意,你總是可以改變它。

+0

請注意'
[^ <]*
'與
*不一樣。
'。 – Gumbo 2010-01-08 08:17:25

+0

非常好的答案。謝謝,但我想問一個問題。這很好> [^ <] *產生這個結果'> like'。但是我想從結果中刪除'>'標記。所以我只想有'喜歡'的結果。我怎樣才能做到這一點? – uzay95 2010-01-08 08:18:15

+0

@Gumbo,但他們有相同的結果。 – uzay95 2010-01-08 08:19:16

0

通常解決這類問題是使用 「捕獲組」。大多數正則表達式系統不僅可以提取整個匹配序列,還可以提取其中的子匹配。這是通過將()中的部分表達式分組來完成的。舉例來說,如果我用下面的表達式(這是在JavaScript中,我不知道你想成爲什麼樣的工作語言,但在大多數語言的基本思想工作):

var string = "<BR>like <BR>Abdurrahman<BR><SMALL>Fathers Name</SMALL>"; 
var match = string.match(/<BR>.*?<BR>([a-zA-Z]*)/); 

然後我可以得到或者使用match[0](即"<BR>like <BR>Abdurrahman")匹配的所有內容,或者我只能使用match[1]獲得圓括號內的部分,這給出"Abdurrahman"

+0

你確定這個工作正常嗎? – uzay95 2010-01-08 07:45:11

+0

我不確定你在找什麼。你可能想澄清你的問題。這會告訴你如何找到兩個'
'標籤,然後是你放在括號中的其他東西。例如,如果您正在尋找「父親」,搜索將是'
。*?
。*(Father)',並且第一個子字符串匹配是指它找到'Father'的地方。 http://rubular.com/regexes/12836 – 2010-01-08 08:06:30

0

假設你正在使用PHP,你可以使用爆炸

$str='<BR>like <BR>Abdurrahman<BR><SMALL>Fathers Name</SMALL>'; 
$s = explode("<BR>",$str,3); 
$string = end($s); 
print $string; 

輸出上<BR>分割你的字符串

$ php test.php 
Abdurrahman<BR><SMALL>Fathers Name</SMALL> 

然後你可以使用「$字符串」變量,做你想做的。

以上步驟可以用其他語言完成,也可以使用您的編程語言所具有的字符串分割方法。

0

這個正則表達式應該數學前兩個<br /> S:

/(\s*<br\s*/?>\s*){2}/i

所以你要麼什麼也沒有更換,或用preg_matchRegExp.prototype.match提取參數。

在JavaScript:

var afterReplace = str.replace(/(\s*<br\s*\/?>\s*){2}/i, ''); 

在PHP

$afterReplace = preg_replace('/(\s*<br\s*\/?>\s*){2}/i', '', $str); 

我唯一可以肯定它會在PHP/JavaScript的工作,但它應該在一切工作...

+0

你能告訴我什麼是這個reges的意思嗎?/(\ s * \ s *){2} /我' 我只想學習。 – uzay95 2010-01-08 08:21:02

+0

Dan:這與'
'中的任何輸入文本
'都不匹配,因爲除了標籤之間的\ s之外,不允許其他任何內容。 – 2010-01-08 08:27:11

+0

解釋/(\ S * \ S *){2}/I /#開始正則表達式 (#開始組 \ S#空白 *#的任意數量的先前(增量零) #文字 \ S#前面的空白 *#零個或多個 )#端基 {2}的組的#2 /#端的正則表達式 I#匹配非情況下靈敏地 (對不起我的間隔丟失) – ternaryOperator 2010-01-08 14:55:52