PhpStorm 2021.3 Help

结构搜索和替换

传统的搜索过程不考虑源代码的语法和语义。即使您使用正则表达式,PhpStorm 仍然会将您的代码视为常规文本。结构搜索和替换( SSR ) 操作让您可以根据代码结构在代码中搜索特定的代码模式或语法结构。

PhpStorm 根据您创建的搜索模板和应用的条件查找和替换源代码片段。

从结构上搜索目标

  1. 从主菜单中,选择编辑 | 查找 | 结构搜索以打开“结构搜索”对话框。

  2. 在“结构搜索”对话框中,执行以下操作之一:

    • 从头开始创建您自己的模板

      在编辑器区域中,输入代码模板($variable$代表您的代码),单击设置按钮,然后选择保存模板以保存以供将来使用。

      结构搜索对话框

      PhpStorm 将创建的模板添加到现有模板对话框中的现有模板列表(用户定义节点)中。

    • 使用现有模板之一作为原型

      单击设置按钮,选择现有模板以打开预定义模板列表,然后选择适当的模板。

      考虑以下示例类:

      类 ExampleClass { public function WRONG() { } public function right() { } }

      让我们在类中找到某个方法。

      在现有模板列表中,选择PHP |下模板的所有公共方法 一般

      现有模板对话框

      单击“确定”返回“结构搜索”对话框以使用所选模板。

      PhpStorm 会立即在编辑器中突出显示找到的代码。

  3. 结构搜索”对话框显示所选模板和模板中使用的过滤器的值。您可以编辑现有过滤器或添加新条件。将插入符号放在代码变量上,并使用过滤器区域来管理过滤器。

    编辑过滤器弹出窗口
  4. 在过滤器区域中,单击添加按钮以添加新条件。例如,如果您需要添加正则表达式,请选择Text。您还可以根据您的变量添加其他条件。

  5. 在打开的字段中,输入您的条件。

    例如,让我们键入以下正则表达式:

    \b[az]\w+\b
    将正则表达式添加到过滤器对话框

    在这种情况下,当您在“结构搜索”对话框中选择“匹配大小写”复选框时,PhpStorm 将仅搜索带有大写字符的字段。

    另请注意,默认情况下,Recursive复选框处于选中状态。这意味着 PhpStorm 执行递归搜索,所有嵌套项都将包含在结果中。例如,当您搜索方法调用时,启用Recursive选项时,PhpStorm 将在foo(foo(foo())). 禁用Recursive选项后,只会找到外部方法调用。

  6. 指定以下选项以进一步缩小搜索范围:

    • 文件类型- 使用列表选择哪些文件类型应该是搜索的一部分。在我们的例子中,它是PHP

    • 范围- 指定搜索位置:在项目、模块、目录或自定义范围内。

    • 搜索目标- 您可以选择完全匹配来匹配确切的模板或其他可用的代码元素(在我们的例子中是 b)。

      搜索目标
  7. 单击查找

PhpStorm 在查找工具窗口中显示结果。

查找工具窗口结果

您可以将新创建​​的搜索模板作为自定义模板添加到结构搜索检查中,并在以后使用它来检查您的代码。

在结构上替换目标

  1. 从主菜单中,选择编辑 | 查找 | 从结构上替换

  2. 结构替换对话框中,将新模板或现有模板添加到搜索和替换模板区域。您可以以与搜索相同的方式保存替换模板。

  3. 如果您需要为替换模板中的变量添加过滤器,请在感兴趣的变量处放置一个插入符号,并使用过滤器区域来管理过滤器。

    替换模板过滤器
  4. 在过滤器区域中,根据您选择的过滤器,指定条件。

  5. 要缩小替换结果的范围,请选择以下选项:

    • 缩短完全限定名称- 用短名称和导入替换完全限定的类名称。

    • 重新格式化- 自动格式化替换的代码。

    • 使用静态导入- 尽可能使用静态导入替换。

    指定必要的选项后,单击查找。PhpStorm 在查找工具窗口中显示结果。

  6. 在“查找”工具窗口中,您可以进一步处理结果,一个一个替换找到的项目,或者一次替换所有项目,或者预览您的潜在更改。

考虑以下将标签中class属性的大写值转换为小写的示例。p搜索模板字段中,我们创建了一个模板,用于搜索属性中具有大写值(和大小写匹配)的所有p标签。我们将搜索范围缩小到这些值(Search target = b)。在替换模板字段中,我们创建一个新变量并为其分配一个 Groovy 脚本 ( )。搜索完毕后,我们选择Replace All进行替换。[A-Z].*classclass$d$b.getText().toLowerCase()

共享搜索模板

您可以通过导出或导入搜索模板与您的同行共享。

  1. 结构搜索对话框(编辑|查找|结构搜索)中,创建一个新的搜索模板或使用现有的

  2. 要导出模板,请单击设置按钮并选择将模板导出到剪贴板。PhpStorm 将模板的 XML 表示添加到剪贴板(按下Ctrl+Shift+V可查看剪贴板的内容)。您可以在聊天、电子邮件或论坛中与其他开发人员共享此表示。

    Ctrl+C要导入模板,请从任何地方(电子邮件、聊天或论坛)复制 ( ) 共享 XML 代码,然后在“结构搜索”对话框中,单击设置按钮并选择从剪贴板导入模板。PhpStorm 采用 XML 代码表示并将其转换为包含变量和范围(如果存在)的模板。

最后修改:2022 年 1 月 19 日