有人对repo进行了更改,将"
的所有或大多数实例替换为'
以分配字符串。这有破坏许多解析变量的字符串的意外效果。例子:
$query = 'ALTER TABLE ' . $items . ' ADD `user_$name`';
$query .= '($length)';
etc.
显然这会破坏SQL查询,但它可能不仅限于分配给$query
的字符串。
是否有正则表达式或PhpStorm的某些功能,我可以使用它来查找所有这些实例并修复它们,或者通过还原到"
或使用'
连接?
答案 0 :(得分:0)
所以你想找到包含$
的单引号字符串文字。显而易见的是:
/'[^'$]*[$][^']*'/
应该找到包含$
的任何单引号字符串。不幸的是,这不太有效,因为可能存在反斜杠转义的字符。所以这稍微好一些:
/'(?:[^'$]|\\.)*[$](?:[^']|\\.)*'/
但另一个问题是,可能会有比这更多的东西:
'foo' . $bar . 'baz'
并且正则表达式匹配' . $bar . '
。为了解决这个问题,我们可以编写一个正则表达式,它匹配从行首开始的子字符串,直到包含$
的第一个单引号字符串文字:
/^(?:[^']|'(?:[^\\']|\\.)*')*'(?:[^'$]|\\.)*[$](?:[^']|\\.)*'/
<强>注意事项:强>
/\\/
等同于new RegExp('\\\\')
)。m
(同样,我不知道您正在使用什么正则表达式引擎),因此初始^
将在开头时匹配每一行,而不仅仅是字符串的开头;同样,取消设置可能被称为s
的标志,因为您不希望.
匹配换行符。