对于那些正则表达式专家,你可以帮我调整这个正则表达式,总是在两个匹配的字符之间添加一个空格。
我的尝试是解决Vue.js对于从服务器端传递的数据的插值安全性问题(Vue.js将尝试评估两个花括号之间的任何内容)。目标是:
我的str_replace解决方案(仅实现目标#1)
str_replace(
['{', '}', '{', '}', '{', '}' ],
['{ ', '} ', '{ ', '} ', '{ ', '} '],
$value
);
到目前为止我尝试过的正则表达式:
preg_replace('/({|}|{|}|{|})(\S)/', '$1 $2', $value);
因此它会检查任何匹配的字符,后面跟空格并在两个字符之间插入空格。
正则表达式在大多数情况下都有效,但在有三个或更多匹配字符时会失败。
Ex:{{{
返回{ {{
,但预期输出为{ { {
。
答案 0 :(得分:3)
它没有按预期工作,因为前两个{
字符与regex
匹配,替换完成然后继续搜索3 rd 字符输入字符串
您可以通过将第二个括号转换为forward assertion来解决此问题。这样,第一个匹配时不会消耗第二个}
,下一个搜索将以输入字符串的第二个字符开头:
preg_replace('/({|}|{|}|{|})(?=\S)/', '$1 ', $value);
这种方式只有一个捕获组,$2
始终为空,替换字符串中不再需要它。
查看实际操作:https://3v4l.org/CaMHS。添加了+++
个标记,表明第三个{
与regex
不匹配,并且没有替换。