结构搜索和替换示例
正如您所知,常规搜索和结构化搜索之间的主要区别在于,结构化搜索中我们在编程语言中查找结构模板。
结构搜索的美妙之处在于,您可以基于现有模板创建一个模式,在搜索和替换代码时节省时间。
现有模板的广泛列表涵盖了从简单模式到更复杂模式的许多用例。
模式中的每个项目都由变量组成,这些变量两边都被 $ 符号限制。
方法调用
搜索方法调用的最简单模板是 $Instance$->$MethodCall$($Arguments$)。
查找 工具窗口显示检测到的方法调用。
如果您需要定位具有特定参数数量的方法调用,请将插入符号放在 $Arguments$ 变量处,并为其配置 Count 过滤器。
要导航到源代码中的方法调用,请在 查找 工具窗口中双击它。 PhpStorm 会在编辑器中打开相应的文件,并将插入符号定位到方法调用处。

PHP 类
如果您有一个 PHP 类 MyClass:
那么搜索它的最简单模板是 class $a$ {}。
接口的实现
如果您有一个 PHP 接口 MyInterface 和一个实现它的类 Implementation:
那么搜索实现的最简单模板是 class $Class$ implements $SomeInterface$ {}。
子类
如果您有一个 PHP 类 Parent 和一个扩展它的类 Descendant:
那么搜索 Descendant 的最简单模板是 class $Class$ extends $AnotherClass$ {}。
语句
搜索 if 语句的最简单模板是 if($var$){$code$}。
结果中检测到的匹配项将显示在 查找 工具窗口中,双击您感兴趣的项以导航到源代码。 PhpStorm 会在编辑器中打开相应的文件,并将插入符号定位到语句处。

注释和字符串字面量
查找包含 foo 的注释或字面量的最简单模板是: $SomethingWeWantToFind$ 或 "$SomethingWeWantToFind$"。 要查找包含某些特定单词(例如,将 foo 作为一个单词)的注释/字符串,应将其指定为文本约束。
HTML 和 XML 示例
以下示例展示了如何在 HTML 和 XML 代码中使用结构搜索。
搜索 XML 和 HTML 标签、属性及其值
搜索标签的最简单模板是 <$tag$/>。
通过对变量
$tag$施加约束,您可以指定要查找的标签。 例如,如果您指定li,您将获得所有li标签。请考虑以下用于在 XML 和 HTML 中搜索的模板:
<$tag$ $attribute$=$value$ />。 例如,如果您为id变量指定文本过滤器$attribute$和作为$value$变量文本过滤器的正则表达式\d+,您可以在id属性中找到所有具有数值的标签。
删除所有 id 属性大于 2 的行
创建一个 HTML 文件并粘贴以下代码:
<!doctype html> <html> <head> <title>Structural Search Example</title> <body> <ul> <li id="1">Example line 1</li> <li id="2">Example line 2</li> <li id="3">Example line 3</li> <li id="a">Example line a</li> <li id="5">Example line 5</li> </ul> </body> </html>在主菜单中,进入 .
从 语言(L) 列表中选择 HTML。
请将以下字符串粘贴到 搜索模板 字段:
<$tag$ $attribute$="$value$">点击
$tag$变量。在筛选面板中,点击 添加修饰符 ,选择 文本 ,然后在值字段中键入
li。如果过滤面板不可见,请单击
切换修饰符面板。

点击
$attribute$变量。在筛选面板中,点击 添加修饰符 ,选择 文本 ,然后在值字段中键入
id。点击
$value$变量。在筛选面板中,点击 添加修饰符 ,选择 文本 ,然后在值字段中键入
\d+。\d+正则表达式将搜索结果限制为数值。 因此,包含id="a"的行将被过滤。在不切换焦点的情况下,从过滤器面板中,点击 添加 按钮,选择 脚本 并粘贴以下代码:
value.getText().replaceAll (/"/, '').toInteger() > 2脚本读取
$value$变量的内容,并将其作为字符串返回(例如,"1")。 然后该脚本替换所有的引号并将字符串值转换为整数,并与2进行比较。
将 li 标签中 class 属性的值从大写转换为小写
创建一个 HTML 文件并粘贴以下代码:
<!doctype html> <html> <head> <title class="EXAMPLE">Structural Replace Example</title> <body> <ul> <li class="EXAMPLE">Example line 1</li> <li class="example">Example line 2</li> <li class="EXAMPLE">Example line 3</li> <li class="example">Example line a</li> <li id="EXAMPLE">Example line 5</li> </ul> </body> </html>在主菜单中,进入 .
从 语言(L) 列表中选择 HTML。
请将以下字符串粘贴到 搜索模板 字段:
<$tag$ $attribute$="$value$">请选择 区分大小写(C) 复选框。
点击
$tag$变量。在筛选面板中,点击 添加修饰符 ,选择 文本 ,然后在值字段中键入
li。点击
$attribute$变量。在筛选面板中,点击 添加修饰符 ,选择 文本 ,然后在值字段中键入
class。点击
$value$变量。在筛选面板中,点击 添加修饰符 ,选择 文本 ,然后在值字段中键入
[A-Z].*。[A-Z].*正则表达式将搜索结果限制为大写值。从 目标(T) 列表中选择 value。 此过程将突出显示
class属性的所有大写值。在 替换模板 字段中,粘贴
$to_lower_case$变量。点击
$to_lower_case$变量。在筛选面板中,点击 添加修饰符 ,选择 脚本 并粘贴以下代码:
value.getText().toLowerCase()
点击 查找。
在 查找 工具窗口中,预览找到的结果并点击 全部替换(A)。
