[英]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.