2012-12-27 80 views
2

我有裝載看起來像線串$newstringPHP - 需要一個爆炸串2名不同的分隔符

<tt>Thu 01-Mar-2012</tt> &nbsp; 7th of Atrex, 3009 <br> 

我想用<tt><br>作爲分隔符爆炸$newstring

如何使用preg_split()或其他任何東西來爆炸它?

+0

那麼你到目前爲止嘗試過什麼?你是如何得到這些字符串的? –

+0

以你的方向從字面上看,我希望得到的結果有以下三個部分:_empty string_,'週四01-MAR-2012   ATREX,3009',_empty string_的第7位。爲了清楚起見,您的預期結果是什麼? – Wiseguy

+0

這些字符串來自卷頁的網頁。我試圖通過將它分解成由
分隔的子字符串來清理字符串。我是新來的正則表達式等,所以我試圖得到一個preg_split表達式,它將做到這一點。 –

回答

1

好吧,我對我的Nexus 7,我發現這是不是太優雅的回答在平板電腦上的問題,但無論如何你可以使用preg_split使用以下正則表達式做到這一點:

<\/?tt>|</?br> 

見正則表達式在這裏工作:http://www.regex101.com/r/kX0gE7

PHP代碼:

$str = '<tt>Thu 01-Mar-2012</tt>  7th of Atrex, 3009<br>'; 
$split = preg_split('@<\/?tt>|</?br>@', $str); 

var_export($split); 

數組$split將包含:

array ( 
    0 => '', 
    1 => 'Thu 01-Mar-2012', 
    2 => ' 7th of Atrex, 3009', 
    3 => '' 
) 

(見http://ideone.com/aiTi5U

+0

不知何故,當我嘗試回顯它時,它不顯示新變量。 $ newtring = preg_split('\ | \ <\/tt\> | \ ',$ curl_scraped_pa​​ge); 確認$ curl_scraped_pa​​ge包含數據。 echo $ newstring不顯示任何東西 –

+0

@Petah爲什麼不呢?我會更新答案。 :-) –

+0

@JordanFine你在正則表達式的開頭和結尾忘了分隔符。所有的PHP preg_XXX函數都需要它們。 – Barmar

0

試試這個代碼..

<?php 

$newstring = "<tt>Thu 01-Mar-2012</tt> &nbsp;7th of Atrex, 3009<br>"; 

$newstring = (explode("<tt>",$newstring)); 
        //$newstring[1] store Thu 01-Mar-2012</tt> &nbsp;7th of Atrex,  3009<br> so do opration on that. 

$newstring = (explode("<br>",$newstring[1])); 
echo $newstring[0]; 
?> 

output:--> 

Thu 01-Mar-2012</tt> &nbsp;7th of Atrex, 3009 
+0

這只是說「Array」作爲輸出 –

+0

我正在$ newstring中顯示結果存儲。你想在程序中使用結果,那麼輸出值將得到$ newstring [0]。 – Sandy8086

+0

不應該newstring現在只包含所有以開始並以
結尾的子串?所以如果我回聲$ newstring,它不應該顯示它們嗎? –

0

你應該試試這個代碼..

<?php 
$keywords = preg_split("/\<tt\>|\<br\>/", "<tt>Thu 01-Mar-2012</tt> &nbsp; 7th of Atrex, 3009 <br>"); 
print_r($keywords); 
?> 

看看CodePad exapmle。

如果你想包括</tt>也可以使用.. <\/?tt>|<br>。請參閱Example

0

如果<tt><br/>標籤字符串中的唯一的標籤,這樣一個簡單的正則表達式會做:

$exploded = preg_split('/\<[^>]+\>/',$newstring, PREG_SPLIT_NO_EMPTY); 

表達:
分隔符開始,以<結束,>分別
在在這些字符之間至少有1個[^>](這是任何字符除外關閉>

PREG_SPLIT_NO_EMPTY
這是一個常數,傳遞給preg_split功能避免了空字符串數組值:

$newString = '<tt>Foo<br/><br/>Bar</tt>'; 
$exploded = preg_split('/\<[^>]+\>/',$newstring); 
//output: array('','Foo','','Bar',''); or something (off the top of my head) 
$exploded = preg_split('/\<[^>]+\>/',$newstring, PREG_SPLIT_NO_EMPTY); 
//output: array('Foo', 'Bar') 

但是,如果你處理這些兩個以上的標籤,或者輸入變量(就像用戶提供的那樣),你最好解析標記。查看php的DOMDocument課程,請參閱the docs here

PS:看到實際的輸出,嘗試echo '<pre>'; var_dump($exploded); echo '</pre>';

0
function multiExplode($delimiters,$string) { 
    return explode($delimiters[0],strtr($string,array_combine(array_slice($delimiters,1),array_fill(0,count($delimiters)-1,array_shift($delimiters))))); 
} 

EX: $值= multiExplode(陣列( 「」, 「
」),$ your_string);