结构化搜索和替换
传统的搜索过程不会考虑源代码的语法和语义。 即使您使用正则表达式,PhpStorm 仍然将您的代码视为常规文本。 结构化搜索和替换 (SSR )操作允许您根据代码结构在代码中搜索特定的代码模式或语法结构。
PhpStorm 根据您创建的 search templates和您应用的 conditions查找和替换源代码片段。
结构性地搜索目标
在主菜单中,转到 以打开 结构化搜索 对话框。
要快速切换到 结构化替换 对话框,请点击
。
在 结构化搜索 对话框中,执行以下操作之一:
从头创建模板:在模板列表中选择 草稿模板 ,并在编辑器区域中输入代码模板(例如,使用
$variable$表示您的代码)。要保存自定义模板以供以后使用,请在对话框工具栏上单击 保存模板 图标(
)。 您也可以选择将该模板保存为检查。

PhpStorm 会将创建的模板添加到模板列表中的 最近 节点。
使用现有模板作为原型:从可用的现有模板列表中选择所需的模板。
请考虑以下示例类:
class ExampleClass { public function WRONG() { } public function right() { } }让我们在类中查找某个方法。
在现有模板列表中,选择 类的所有公共方法模板,位于 下。

单击 查找 ,在整个项目中搜索这些结构。
PhpStorm 会在编辑器中即时突出显示所找到的代码。
在 结构化搜索 对话框中会显示所选模板及其过滤器的值。 您可以编辑现有过滤器或添加新的 条件。 将插入符号置于某个代码变量上,并使用过滤器区域管理其过滤器。

例如,为
$b$变量添加一个条件。在 修饰符 面板中,单击 Add (
)以创建新的修饰符。 要使用正则表达式,请选择 文本。 您还可以根据变量添加 其他修饰符。
对于 文本 修饰符,输入以下正则表达式:
\b[a-z]\w+\b
在这种情况下,当您在 结构化搜索 对话框中选中 区分大小写 复选框时, PhpStorm 仅搜索首字符为大写的字段。
还提供其他选项,具体取决于所选语言。
例如,请查看以下选项:
Language :使用该列表选择要在搜索中包含的文件类型。 在此情况下,它为 PHP。
目标 :使用该列表选择要搜索的项。 在此情况下,它为
b。
递归 :选中后, PhpStorm 将执行递归搜索,所有嵌套项都会包含在结果中。 例如,在启用 递归 的情况下搜索方法调用时, PhpStorm 会在
foo(foo(foo()))中找到嵌套调用。 禁用 递归 时,仅会找到外层调用。注入的代码 :选中后,诸如 HTML 中的 JavaScript 或 Java 中的 SQL 等注入的代码将包含在搜索中。
区分大小写 :选中后,搜索结果将与搜索目标的大小写匹配。
指定搜索范围:项目、模块、目录或自定义范围。
点击 查找。
PhpStorm 会在 查找 工具窗口中显示结果。

您可以将新的搜索模板作为自定义模板添加到 结构化搜索检查。 为此,请在 查找 工具窗口中单击 从模板创建检查。 随后即可重复使用它来检查您的代码。
替换一个目标结构
在主菜单中,进入 .
如果您需要为替换模板中的变量添加过滤器,请将文本光标放在相关变量处,并使用过滤器区域来管理过滤器。

在过滤器区域中,根据您选择的 过滤器 ,指定条件。
要缩小替换结果,请选择以下选项:
缩短完全限定名称 - 将完全限定类名替换为简短名称和导入。
重新格式化 - 会自动格式化替换的代码。
使用 static import - 在可能的情况下使用静态导入进行替换。
指定必要选项后,点击 查找。 PhpStorm 在 查找 工具窗口中显示结果。
在 查找 工具窗口中,您可以进一步处理结果,逐一替换找到的项目,或一次性替换所有项目,或预览您潜在的更改。
请考虑以下示例,将 class 属性中 p 标签的大写值转换为小写。 在 搜索模板 字段中,我们创建了一个模板,用于搜索 p 标签中所有大写值([A-Z].* 和 区分大小写 ),位于 class 属性中。 我们将搜索范围缩小到这些 class 值(搜索目标 = b)。 在 替换模板 字段中,我们创建了一个新变量 $d$ ,并为其分配了一个 Groovy 脚本(b.getText().toLowerCase())。 搜索完成后,我们选择 全部替换 执行替换。
共享搜索模板
您可以通过导出或导入搜索模板与同事共享。
在 结构化搜索 对话框 中, 创建一个新的搜索模板或使用现有的模板。
要导出模板,请点击
。 PhpStorm 将模板的 XML 表示添加到剪贴板(按 Ctrl+Shift+V 以查看剪贴板内容)。 您可以在聊天、电子邮件或论坛中与其他开发者共享此表示形式。
要导入模板,请从任何地方(电子邮件、聊天或论坛)复制(Ctrl+C )共享的 XML 代码,并在 结构化搜索 对话框中点击
。 PhpStorm 接受 XML 代码表示并将其转换为模板,包括变量和作用域(如果存在)。