逃避我自己的正则表达式

时间:2016-09-07 16:49:05

标签: php regex

我有一个功能,可以将匹配的内容替换为更大的文本内容中的其他内容。

  

这是[5]内容

因此,在此示例中,正则表达式在'[]'中查找任何内容,并将其替换为由'5'确定的内容,假设索引为5的表中的字符串。

这是我正在使用的正则表达式:

/(?<!/)\[(.*?)\]?\]/

对其他功能进行了一些额外的括号检查,现在看一下,排除任何前面带有'/'的标签

我想要做的是,当一个标签使用/进行转义时,它将删除转义字符并继续下一场比赛。

所以:

  

这是/ [5]内容

变为:

  

这是[5]内容

而不是:

  

这是[5]内容

成为:

  

这是[在此处插入内容]内容

我希望这不会太混乱。

我正在替换匹配内容的方式是使用递归函数找到第一个匹配项,替换它,更新原始材料,然后调用它自己,直到没有匹配为止。这可能是我的问题的根源,但我无法想出另一种方法。如果我preg_match所有匹配一次并循环遍历每个匹配,更新原始内容,那么匹配标签的位置会从preg_match运行时变化,所有内容都会混淆。

下面是问题http://pastebin.com/ckVXNaxt

中的函数的粘贴

1 个答案:

答案 0 :(得分:0)

所以我发现preg_replace_callback似乎很适合我的需要

return preg_replace_callback( $tagRegex, function($matches){
  //if match starts with '/' remove slash and return
  //otherwise do logic
}
,$content);

我的成品http://pastebin.com/qJ1g0pPq