0

我正在尝试创建一个测验系统。我在数据库中有这个表:

CREATE TABLE fill_gap_exercise (
  quiz_id INT PRIMARY KEY,
  text VARCHAR,
  wordslist VARCHAR,
  date DATETIME
)

这是表中的示例数据行:

INSERT INTO fill_gap_exercise
  (quiz_id, text, wordslist, date)
VALUES
  (4, 'hello {0} up {1}', 'a:2:{i:0;s:5:"whats";i:1;s:5:"men??";}', '2012-10-29 13:24:25')

我正在尝试替换字段中{}的字符,但是当句子中多次出现该序列text时我遇到了问题。{}

这是我的代码:

<?php

  include('../connect_db.php');

  $myData = mysql_query('SELECT * FROM fill_gap_exercise');

  while ($row = mysql_fetch_array($myData, MYSQL_ASSOC))
  {    

    $array = unserialize($row['wordslist']);
    $text  = implode('\r\n', $array);

    echo "\n<br />";

    $pattern = '/\{(.*)\}/';
    $replace = '<input type="text" name="j_1" id="' . $row["quiz_id"] . '" />';
    $subject = $row['text'];
    $string = preg_replace($pattern, $replace, $subject);

    print $string;    
  }    
4

2 回答 2

3

使用惰性量化器

替换'/\{(.*)\}/''/\{(.*?)\}/'

于 2012-10-29T11:42:17.700 回答
0

无论如何,您很可能需要位置计数器,那么为什么不简单地从字符串中获取它呢?自动消除贪婪/非贪婪问题。

例如

<?php
$row = array("quiz_id"=>47);
$string = 'hello {0}, up {1}?';

$string = preg_replace('/{(\d+)}/', '<input type="text" name="q['.$row["quiz_id"].'][\\1]" />', $string);

echo $string;

印刷

hello <input type="text" name="q[47][0]" />, up <input type="text" name="q[47][1]" />?
于 2012-10-29T11:50:51.243 回答