2012-11-13 129 views
1

不幸的是,我真的無法繞過正則表達式,所以我最後的手段是要求你的幫助好的人。PHP preg_replace在現有字符串中插入字符串

我有這樣的現有代碼:

<li id="id-21" class="listClass" data-author="newbie"> 
    <div class="someDiv"> 
     <span class="spanClass">Some content</span> 
    </div> 

    <div class="controls faint"> 
     <a href="link2">Link 2</a> 
     <a href="link3">Link 3</a> 
    </div> 
</li> 

由於一些原因,我不得不使用的preg_replace注入額外的代碼塊:

<a href="link1">Link 1</a> 

我想你可以猜出這應該去,但爲了清楚起見,我的願望是所得到的字符串看起來像:

<li id="id-21" class="listClass" data-author="newbie"> 
    <div class="someDiv"> 
     <span class="spanClass">Some content</span> 
    </div> 

    <div class="controls faint"> 
     <a href="link1">Link 1</a> 
     <a href="link2">Link 2</a> 
     <a href="link3">Link 3</a> 
    </div> 
</li> 

任何人都可以幫助我用適當的正則表達式來實現這一目標嗎?

+0

你更好更精確。你的意思是你只是想在'Link 2'之前插入'Link 1'??? – luiges90

+4

不要使用正則表達式來解析/操作HTML。獲取一個合適的HTML解析器。 –

+0

@Alvin Wong True,正則表達式**不能**解析任意的HTML。期。 – luiges90

回答

1

試試這個

$html = '<li id="id-21" class="listClass" data-author="newbie"> 
    <div class="someDiv"> 
     <span class="spanClass">Some content</span> 
    </div> 

    <div class="controls faint"> 
     <a href="link2">Link 2</a> 
     <a href="link3">Link 3</a> 
    </div> 
</li>'; 


$eleName = 'a'; 
$eleAttr = 'href'; 
$eleAttrValue = 'link2'; 
$addBefore = '<a href="link1">Link 1</a>'; 

$result = regexAddBefore($html, $eleName, $eleAttr, $eleAttrValue, $addBefore); 

var_dump($result); 

function regexAddBefore($subject, $eleName, $eleAttr, $eleAttrValue, $addBefore){ 
    $regex = "/(<\s*".$eleName."[^>]*".$eleAttr."\s*=\s*(\"|\')?\s*".$eleAttrValue."\s*(\"|\')?[^>]*>)/s"; 
    $replace = $addBefore."\r\n$1"; 

    $subject = preg_replace($regex, $replace, $subject); 

    return $subject; 
} 
+0

絕對真棒,謝謝。正是我需要的。 – SpongeBobPHPPants

+0

不客氣 –

0

我可以建議兩件事情(雖然我不能清楚地瞭解你的問題)

$newStr = preg_replace ('/<[^>]*>/', ' ', $htmlText); 

這將刪除字符串中的所有HTML標籤。我不知道這對你是否有用。

另一個建議是使用strip_tags函數。 strip_tags的第二個參數是可選的。您可以在第二個參數的幫助下定義要保留的標籤。

$str = '<li id="id-21" class="listClass" data-author="newbie"> 
     <div class="someDiv"> 
      <span class="spanClass">Some content</span> 
     </div> 

     <div class="controls faint"> 
      <a href="link2">Link 2</a> 
      <a href="link3">Link 3</a> 
     </div> 
     </li>'; 

echo strip_tags ($str,'<a>'); 

這會給你一個輸出,只需要鏈接和HTML字符串中的任何文本。

對不起,如果這也沒有幫助。

+0

不幸的是,我正在使用的軟件無法正常工作。你的解決方案肯定會在正常情況下工作,但基本上我正在努力創建一個插件和手動模板編輯不可行。大部分代碼是我可以從數據庫中提取的原始模板代碼,我唯一的選擇是制定一些正則表達式來將Link 1代碼注入到該代碼中。該軟件稍後將對其進行解析,並執行所需的任何操作來完成HTML工作。我只需要在那裏獲得該鏈接。非常感謝您花時間回覆。 – SpongeBobPHPPants

+0

好的,然後看到新的答案。那是你在尋找什麼?我試圖理解這個問題,但可能是我對它不太好。 – bakyaw