簡體   English   中英

使用preg_replace“更新”搜索的字符串

[英]Using preg_replace to “update” searched string

所以我有這個字符串:

$str='<li>Smartphone: Da</li>
      <li>Touchscreen: Da</li>
      <li>Tastatura QWERTY: Nu</li>
      <li>Tip tastatura: Standard</li>
      <li>Rezolutie senzor (Mp): 5</li>
      <li>SAR (W/kg ): 1.17</li>';

而我想要做的是在li標簽和':'字符之間的單詞中添加一些“強”標簽。 我嘗試在數組中獲取所有想要的單詞:

     preg_match_all('/<li>(.*?):/', $str, $matches);

然后試圖從那里改造它們,但它對我沒那么幫助。 所以現在我正在嘗試使用preg_replace但我不想給替換單詞作為參數,因為它不同於一個li。 換句話說,我想做這樣的事情:

    preg_replace('/<li>(.*?):/',"<strong>'/<li>(.*?):/'</strong>",$str); 

所以我想在li標簽和':'之間搜索文本,然后在前后放置強標簽,以使其變為粗體。

很抱歉,如果我的解釋很糟糕,但我對正則表達式相當新,並且不太了解詞匯量。 提前致謝。

/<li\b[^>]*>\K[^<:]+(?=:)/i

正則表達式可視化

Debuggex演示


preg_replace('/<li\b[^>]*>\K[^<:]+(?=:)/i', '<strong>$0</strong>', $str);

PHP演示

雖然您應該避免像這樣解析和操作HTML,但是如果您知道使用正則表達式進行HTML解析的所有問題並且仍然想要使用正則表達式:

preg_replace('/(?<=<li>)(.+?)(?=:)/', '<strong>$1</strong>', $str);
$str = preg_replace('/(?<=<li>)([^:]*)/', '<strong>$1</strong>', $str);
print_r($str);

輸出:

<li><strong>Smartphone</strong>: Da</li>
<li><strong>Touchscreen</strong>: Da</li>
<li><strong>Tastatura QWERTY</strong>: Nu</li>
<li><strong>Tip tastatura</strong>: Standard</li>
<li><strong>Rezolutie senzor (Mp)</strong>: 5</li>
<li><strong>SAR (W/kg )</strong>: 1.17</li>

您正在尋找的替換表達式是:

preg_replace('/<li>([^:]*):/','<li><strong>\1</strong>:',$str); 

[^:]*部分匹配所有不是“:”的字符(否則正則表達式將是“貪婪的”,請參閱: http//www.regular-expressions.info/repeat.html#greedy )。 \\ 1部分將所選(見“()”)部分插回到表達式中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM