2012-10-24 59 views
-1

我有這樣的情況:PHP:如何獲得2靜態字符串之間的字符串?

<!-- [STATIC STRING] --> 
Some HTML codes here 
<!-- [STATIC STRING END] --> 

如何獲得在PHP靜態的字符串和靜態字符串END之間的任何代碼?是否有可能得到在同等條件之間是這樣的:

<!-- [STATIC STRING] --> 
Some HTML codes here 
<!-- [STATIC STRING] --> 

我只需要把東西之間的一些字符串,所以後來我可以使用PHP操縱它。任何想法如何使其高效?

UPDATE:假設存儲爲file.html和另一邊我有這個PHP腳本,HTML代碼:

$Filename = 'file.html'; 
$Handle = fopen($Filename, "r"); 
$Contents = fread($Handle, filesize($Filename)); 
fclose($Handle); 
從這個PHP

,我不知道怎麼去之間HTML代碼<!-- [STATIC STRING] --><!-- [STATIC STRING END] -->。並使之更簡單......假設在它之前和之後沒有其他代碼。我需要的是這兩者之間的代碼並將其作爲PHP變量。

+1

你介意解釋這是什麼的實際?你解析一些XML文件嗎? –

+0

請檢查我的更新。我添加了更多詳細信息。 –

+0

只是爲了理解這個問題:是否有任何需要解析文件?只要你能控制file.html:爲什麼不把它改成file.phtml,並使用<?php echo $ someHTMLContent?>而不是<! - [STATIC STRING] - >這裏有一些HTML代碼<! - [靜態字符串] - >? – Ron

回答

1

使用此功能從字符串中提取數據

function extractor($str,$from,$to) 
{ 
    $from_pos = strpos($str,$from); 
    $from_pos = $from_pos + strlen($from); 
    $to_pos = strpos($str,$to,$from_pos);// to must be after from 
    $return = substr($str,$from_pos,$to_pos-$from_pos); 
    unset($str,$from,$to,$from_pos,$to_pos);   
    return $return; 
} 
+0

在我的情況下,$ str將是$ Contents,$ from = <! - [STATIC STRING] - >和$ to = <! - [STATIC STRING END] - >,這是什麼意思? –

+0

是的,它會爲它工作。如果你發現這個答案有幫助,我會毫不猶豫的...你的解決方案是最短和最聰明的解決方案,它將提取從 –

+0

之間的數據。被接受爲答案。多謝兄弟! –

1

試至REGx

staticstring(.*)staticstring 
+0

可否請檢查我的更新,看看是否適用於RegEx?謝謝。 –

+0

當你使用靜態字符串和更大的輸入時,你應該考慮使用strpos而不是正則表達式。 – Ron

0

我能想到的,你想要的是一個定界符最接近:

public $myHTML = <<<EOT 
<div>bar</div> 
EOT; 

如果你只是想要的東西在你的HTML內嵌了後來被例如使用屏幕刮板等,那麼爲什麼不只是將你想要的HTML嵌入到你可以參考的ID中。

0

如果你是新來的PHP,你將需要檢查strlenstrpossubstr功能PHP 示例代碼:

<?php 
    $str = "[STATIC STRING] 
     Some HTML codes here 
     [STATIC STRING END]"; 
    $answer = $str; 
    $start_text = "[STATIC STRING]"; 
    $end_text = "[STATIC STRING END]"; 
    $start_index = strpos($answer,$start_text)+strlen($start_text); 
    $answer = substr($answer,$start_index); 

    $end_index = strpos($answer,$end_text); 
    $answer = substr($answer,0,$end_index); 

    echo $answer; 
?> 
0

試試這個,因爲它適用於文件中多於一個標籤,(不會涵蓋嵌套標籤)

preg_match_all('<!--\s\[STATIC\sSTRING\]\s-->(?P<match>(?:(?!<!--\s\[STATIC\sSTRING\sEND\]\s-->).)*)<!--\s\[STATIC\sSTRING\sEND\]\s-->', $string, $match); 

然後$ match ['match']將獲得您的數據。

我花了幾分鐘,就這一個,

Array 
(
    [0] => Array 
     (
      [0] => <!-- [STATIC STRING] --> 
Some HTML codes here 
<!-- [STATIC STRING END] --> 
     ) 

    [match] => Array 
     (
      [0] => 
Some HTML codes here 

     ) 

    [1] => Array 
     (
      [0] => 
Some HTML codes here 

     ) 

) 

PS。你應該可以

$arr = array_map('trim', $match['match']); 

並刪除所有的外部空間。

個人ID去用這樣的標籤,

<!-- { html content } --> 

可以更容易匹配。

$string = '<!-- { STATIC STRING } --> 
<b> hello</b> 
<!-- { <strong>Other STATIC STRING</strong> } -->'; 

preg_match_all('/<!--\s\{(?P<match>(?:(?!\}\s-->).)*)\}\s-->/', $string, $match); 

輸出

Array 
(
    [0] => Array 
     (
      [0] => <!-- { STATIC STRING } --> 
      [1] => <!-- { <strong>Other STATIC STRING</strong> } --> 
     ) 

    [match] => Array 
     (
      [0] => STATIC STRING 
      [1] => <strong>Other STATIC STRING</strong> 
     ) 

    [1] => Array 
     (
      [0] => STATIC STRING 
      [1] => <strong>Other STATIC STRING</strong> 
     ) 

) 
相關問題