2013-05-06 35 views
1

我如何搜索下面的HTML代碼中的單詞「」:PHP或sed的:插入時的字符串匹配現有的HTML標記中的HTML標籤

<p>Text here ok</p> 
<h4> 
Box 1.2</h4> 
<p>Text here ok</p> 

,並具有輸出如下?

<p>Text here ok</p> 
<h4><a name="box1.2"></a>Box 1.2</h4> 
<p>Text here ok</p> 

注意<h4>和Box之間的換行符需要刪除。另一件事是我會有「盒子2.0」,「盒子2.3」等,所以只有「盒子」這個詞有匹配的模式。

+0

使用str_replace()函數來做到這一點 – 2013-05-06 07:54:26

+0

將它永遠是在'

'的標籤,也可以是其它的HTML標籤內(如div,p,span等)? – anubhava 2013-05-06 07:55:55

回答

0

使用PHP:

$str = '<p>Text here ok</p> 
<h4> 
Box 1.2</h4> 
<p>Text here ok</p>'; 

$new = preg_replace('/\s*(box)\s*(\d+(:?\.\d+)?)/i', '<a name="$1$2">$1 $2</a>', $str); 
echo $new; 

說明:

/ #START delimiter 
    \s* #match spaces/newlines (optional/several) 
    (box) #match "box" and group it (this will be used as $1) 
    \s* #match spaces/newlines (optional/several) 
    (\d+(:?\.\d+)?) #match a number (decimal part is optional) and group it (this will be used as $2) 
/#END delimiter 
i #regex modifier: i => case insensitive 
+1

'(\ d +(:?\。\ d +))' - >'(\ d +(?:\。\ d +)?)' – 2013-05-06 09:08:23

+0

@CasimiretHippolyte啊謝謝,我忘了:) – HamZa 2013-05-06 09:15:54

1

這裏有一些讓你去。

<?php 
$html = '<p>Text here ok</p> 
<h4> 
Box 1.2</h4> 
<p>Text here ok</p>'; 

$html = preg_replace_callback('~[\r\n]?Box\s+[\d.]+~', function($match){ 
    $value = str_replace(array("\r", "\n"), null, $match[0]); 
    $name = str_replace(' ', null, strtolower($value)); 
    return sprintf('<a name="%s"></a>%s', $name, $value); 
}, $html); 

echo $html; 

/* 
    <p>Text here ok</p> 
    <h4><a name="box1.2"></a>Box 1.2</h4> 
    <p>Text here ok</p> 
*/ 
+0

@anubhava:是的,可能是任何其他標籤,但關注的是「Box」這個詞。這是另一個文件的一部分,它在這裏尋找盒裝錨。 – horkust 2013-05-06 08:36:04

+0

謝謝。它似乎現在工作。乾杯。 – horkust 2013-05-06 08:39:14