我有许多文本字符串,以下是一些示例:
- 这是我的第一个示例字符串。{{1}} 这是它的样子。
- 这是我的第二个示例字符串。{{1,2}}。这是它的样子。
- 这是我的第三个示例字符串。{{1,3}} 和 {{2}}。这是它的样子。
我的代码需要将每个类似于 {{1}}
的标记替换为 <input name="var1">
它还需要将每个类似于 {{1,2}}
的标记替换为 <input name="var1" value="2">
通常,每个类似于 {{a}}
的标记都需要被替换为 <input name="vara">
,每个类似于 {{a,b}}
的标记都需要被替换为 <input name="vara" value="b">
我使用的是 PHP。
最好的方法是什么?每个字符串中都会有许多要替换的 "token"。并且每个字符串都可以具有两种风格的标记。
现在,我的代码看起来像这样:
for ($y = 1; $y < Config::get('constants.max_input_variables'); $y++) {
$main_body = str_replace("{{" . $y . "}}", "<input size=\"5\" class=\"question-input\" type=\"text\" name=\"var" . $y . "\" value=\"".old('var'.$y)."\" >", $main_body);
}
但是,这显然不是很有效率,因为我要循环查找匹配项。当然,我甚至没有匹配那些看起来像{{1,2}}
的标记。
\{\{(\d+)(,(\d+))?\}\}
代码: `$re = "/\{\{(\d+)(,(\d+))?\}\}/mi"; $str = "这是我的第一个示例字符串。{{1}} 这就是它的样子。\n这是我的第二个示例字符串。{{1,2}}。这就是它的样子。\n这是我的第三个示例字符串。{{1,3}} 和 {{2}}。这就是它的样子。"; $subst = "<input name="var$1" value="$3" />"; $result = preg_replace($re, $subst, $str);` - Tushar