php - 替换 {{a,b}} 和 {{a}} 的正则表达式

标签 php regex

我有很多字符串。下面显示了一些示例:

  1. 这是我的第一个示例字符串。 {{1}} 这就是它的样子。
  2. 这是我的第二个示例字符串。 {{1,2}}。这就是它的样子。
  3. 这是我的第三个示例字符串。 {{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。

执行此操作的最佳方法是什么。每个字符串中将有许多要替换的“标记”。每个字符串都可以有两种样式的标记。

现在,我的代码如下所示:

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+))?\}\}

Regex Explanation and Live Demo

  1. \{:字面上匹配{,需要转义,因为它是正则表达式中的特殊符号
  2. (\d+):匹配一个或多个数字,在第 1 组中捕获
  3. (,(\d+))?:匹配一个或多个数字后跟可选的逗号
  4. \}:按字面意思匹配

$1$3 用于替换,分别得到第一个和第三个捕获组。

示例代码用法:

$re = "/\\{\\{(\\d+)(,(\\d+))?\\}\\}/mi";
$str = "This is my first example string. {{1}} This is what it looks like.\nThis is my second example string. {{1,2}}. This is what it looks like.\nThis is my third example string. {{1,3}} and {{2}}. This is what it looks like.";
$subst = "<input name=\"var$1\" value=\"$3\" />";

$result = preg_replace($re, $subst, $str);

关于php - 替换 {{a,b}} 和 {{a}} 的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33537732/

相关文章:

php ->2GB 文件上传 $_FILES ["file"] ["size"] 负数

PHP + Shell 返回 HTML

php - 将查询字符串插入数据库 php-mysql 时出错

Python - 使用 RegEx 操作字符串

c# - 正则表达式匹配不在引号中的关键字

regex - 在powershell中用正则表达式替换文本文件的内容

php - 如何从我的常见问题解答表中显示我的常见问题解答页面中的所有行?

javascript - 在 Razor 页面上使用正则表达式验证电子邮件地址

javascript - 如何使不和谐机器人正确自动大写字符串的第一个字母?正则表达式

php - 正确使用 Not In 子句