我有一个功能,可以将匹配的内容替换为更大的文本内容中的其他内容。
这是[5]内容
因此,在此示例中,正则表达式在'[]'中查找任何内容,并将其替换为由'5'确定的内容,假设索引为5的表中的字符串。
这是我正在使用的正则表达式:
/(?<!/)\[(.*?)\]?\]/
对其他功能进行了一些额外的括号检查,现在看一下,排除任何前面带有'/'的标签
我想要做的是,当一个标签使用/进行转义时,它将删除转义字符并继续下一场比赛。
所以:
这是/ [5]内容
变为:
这是[5]内容
而不是:
这是[5]内容
成为:
这是[在此处插入内容]内容
我希望这不会太混乱。
我正在替换匹配内容的方式是使用递归函数找到第一个匹配项,替换它,更新原始材料,然后调用它自己,直到没有匹配为止。这可能是我的问题的根源,但我无法想出另一种方法。如果我preg_match所有匹配一次并循环遍历每个匹配,更新原始内容,那么匹配标签的位置会从preg_match运行时变化,所有内容都会混淆。
中的函数的粘贴答案 0 :(得分:0)
所以我发现preg_replace_callback似乎很适合我的需要
return preg_replace_callback( $tagRegex, function($matches){
//if match starts with '/' remove slash and return
//otherwise do logic
}
,$content);