Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 是否在单引号字符串中查找$variables的所有实例?_Php_Regex_String_Phpstorm - Fatal编程技术网

Php 是否在单引号字符串中查找$variables的所有实例?

Php 是否在单引号字符串中查找$variables的所有实例?,php,regex,string,phpstorm,Php,Regex,String,Phpstorm,有人对repo进行了更改,将“的所有或大部分实例替换为”,以分配字符串。这产生了意外的效果,破坏了许多解析变量的字符串。示例: $query = 'ALTER TABLE ' . $items . ' ADD `user_$name`'; $query .= '($length)'; etc. 显然,这破坏了SQL查询,但可能不仅仅限于分配给$query的字符串 是否有一个正则表达式或PhpStorm的某个函数,我可以使用它来查找所有实例并修复它们,方法是返回到“,或者使用带有连接的” 所

有人对repo进行了更改,将
的所有或大部分实例替换为
,以分配字符串。这产生了意外的效果,破坏了许多解析变量的字符串。示例:

$query = 'ALTER TABLE ' . $items . ' ADD `user_$name`';

$query .= '($length)';

etc.
显然,这破坏了SQL查询,但可能不仅仅限于分配给
$query
的字符串


是否有一个正则表达式或PhpStorm的某个函数,我可以使用它来查找所有实例并修复它们,方法是返回到
,或者使用带有连接的

所以您希望查找包含
$
的单引号字符串文本。最明显的尝试是:

/'[^'$]*[$][^']*'/
应该可以找到任何包含
$
的单引号字符串。不幸的是,这不太管用,因为可能有反斜杠转义字符。所以这稍微好一点:

/'(?:[^'$]|\\.)*[$](?:[^']|\\.)*'/
但另一个问题是,可能有更多类似的东西:

'foo' . $bar . 'baz'
并且该正则表达式将匹配
”$酒吧。”。为了解决这个问题,我们可以编写一个正则表达式,从一行的开头到第一个包含
$
的单引号字符串文本,都匹配一个子字符串:

/^(?:[^']|'(?:[^\\']|\\.)*')*'(?:[^'$]|\\.)*[$](?:[^']|\\.)*'/
注意事项:

  • 我还没有测试过这些,所以它们可能不太正确
  • 我的PHP有点生疏,所以我不确定字符串文字应该是什么样子
  • 我不知道你是怎么管理regex的;如果从字符串文本使用正则表达式构造函数,则需要额外的字符转义层(例如,在javascript中,
    /\\/
    相当于
    新正则表达式(“\\\\”)
  • 您可能需要设置一个标志,可能称为
    m
    (同样,我不知道您使用的是什么正则表达式引擎),这样初始的
    ^
    将在每一行的开头匹配,而不仅仅是字符串的开头;同样,取消设置可能被称为
    s
    的标志,因为您不希望
    匹配换行符
  • 可能有一些我没想到的不太清楚的情况。理论上可能存在代码注释,其中包含您不想替换的案例

最好的解决办法是找出谁签入了提交,让他们检查每一行代码并手动修复,作为一种公正的惩罚。然后,当它们完成时,回滚repo,然后让它们重写后续提交中的所有代码,并检入这些代码以将其恢复到当前状态。在那之后,解雇他们。哈哈——幸运的是,它不是在生产中,大多数实例最初是被捕获并手动修复的。我刚刚在一个文件中遇到了一对,我想检查一下,确保它们不在整个代码库的其他地方。