簡體   English   中英

php正則表達式匹配和替換

[英]php regular expression matches and replacement

再次。 我正在嘗試通過數據庫表並替換舊BBCode的所有實例(即: [i:fs8d979] )並將其替換為簡單的BBCode( [i] )。 但是,我的結果非常混亂。

$root_path = './';
include($root_path.'includes/common.php');

$posts = array();
$sql = 'SELECT post_id, post_text FROM posts';
$db->query($sql);
while($row = $db->fetch_assoc())
{
    $posts[]['id'] = $row['post_id'];
    $posts[]['text'] = $row['post_text'];
}

foreach($posts as $post)
{
    $regex = "/\[(\D)(\:[a-zA-Z0-9_]{1,})\]/";

    if(preg_match($regex, $post['text'], $matches))
    {
        $string = preg_replace('/'.$matches[2].'/', '', $post['text']);
        $sql = 'UPDATE posts SET post_text = "'.$string.'" WHERE post_id = '.$post['id'];
        $db->query($sql);
        echo $post['id'].'--Matched and replaced<br />';
    }
    else
    {
        echo $post['id'].'--No Match<br />';
    }
}
echo 'done';

當我運行這個腳本時,我得到這樣的輸出:

1302--No Match
--No Match
1303--No Match
--No Match
17305--No Match
--Matched and replaced
5532--No Match
--No Match
17304--No Match
--No Match
1310--No Match
--No Match

似乎腳本試圖做兩次所有事情,我不知道為什么。 數據庫字段也未更新。 為了調試的目的,我已經回應了所有的東西,所有的變量都設置好了,一切看起來都應該正常工作。 有什么建議么?

在代碼中的點:

while($row = $db->fetch_assoc())
{
    $posts[]['id'] = $row['post_id'];
    $posts[]['text'] = $row['post_text'];
}

您正在數組中創建兩個條目,一個具有id,后跟文本。

我想你想要:

while($row = $db->fetch_assoc())
{
    $posts[] = array('id' => $row['post_id'], 'text' => $row['post_text']);
}

它可以解釋為什么每一個都發生兩次而且沒有任何變化。

調試也顯示錯誤的值:

echo $post['id'].'--Matched and replaced<br />';

而輸出是

--Matched and replaced ,顯示沒有帖子ID。

第一:行

$posts[]['id'] = $row['post_id'];
$posts[]['text'] = $row['post_text'];

正在向$posts數組添加兩個元素。 這就是為什么你每個帖子得到兩個輸出。

第二:我不認為冒號:是一個特殊的角色 - 它不需要逃脫。 所以看起來應該是這樣的:

$regex = "/\[(\D)(:[a-zA-Z0-9_]+)\]/";

暫無
暫無

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

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