草庐IT

java - 是否可以自动获取 Intellij 对自己的正则表达式参数的正则表达式帮助

coder 2024-03-06 原文

Intellij 为需要正则表达式的参数提供正则表达式“帮助”(语法检查),例如编码:

String[] array = string.split("(*.");

将在正则表达式下标记错误并提供工具提示错误:

Unclosed group

这也适用于变量,例如

String myVar = "(*."; // shows above error here
String[] array = string.split(myVar);

但是如果我创建自己的需要正则表达式的方法,我就得不到这种帮助,例如:

String[] myMethod(String regexParameter) {
    return someString.split(regexParameter);
}

myMethod("(*."); // no "error" marker like above

尽管 Intellij 可以确定 regexParameter 应该是一个有效的正则表达式,但它不会像检查 JDK 参数那样检查它。

如何为我自己的方法参数获取正则表达式帮助?


备注:

理想情况下,会有一个基于注释的解决方案或类似的解决方案,其中方法的参数被“定义”到 Intellij 作为正则表达式,因此所有开发人员在加载代码库时都会自动获得帮助。

最佳答案

要在 IDE 中激活参数的正则表达式语言,请双击正则表达式字符串并按 AltEnter(Intention Actions) 并选择“注入(inject)语言或引用”,然后在结果列表中选择“正则表达式”:

这会将正则表达式永久附加到所有调用站点的参数。

要对多个文本片段执行此操作,请按住 ShiftAlt 键并继续双击所有实例(多选 IntelliJ 中的功能)。

要创建一个自动具有 Intellij 语言辅助功能的参数,以便您的其他开发团队成员也可以自动获得正则表达式帮助,请使用 IntelliJ 的 IntelliLang通过添加 jetbrains 的注释库作为编译依赖项来插件,例如 gradle:

dependencies {
    ...
    compile 'org.jetbrains:annotations:15.0'
}

然后要使用它,请将"RegExp" 指定为参数的@Language:

import org.intellij.lang.annotations.Language;

void myMethod(@Language("RegExp") String regex) {
    // some impl
}

传递给该方法的字符串的正则表达式验证现在可以从任何在 Intellij 中编辑源代码的人调用任何方法。


注意:有一种不推荐的替代方法,可以向您的构建添加依赖项(如果您有的话),并且知道效果仅在您的 IDE 中,您必须在 IDE Intellij 中编译让你这样做:

  1. 在方法参数上添加@Language("RegExp")注解
  2. 单击红色灯泡图标以将注释导入类路径

关于java - 是否可以自动获取 Intellij 对自己的正则表达式参数的正则表达式帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37009549/

有关java - 是否可以自动获取 Intellij 对自己的正则表达式参数的正则表达式帮助的更多相关文章

  1. ruby - 为什么我可以在 Ruby 中使用 Object#send 访问私有(private)/ protected 方法? - 2

    类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc

  2. ruby-on-rails - 如何验证 update_all 是否实际在 Rails 中更新 - 2

    给定这段代码defcreate@upgrades=User.update_all(["role=?","upgraded"],:id=>params[:upgrade])redirect_toadmin_upgrades_path,:notice=>"Successfullyupgradeduser."end我如何在该操作中实际验证它们是否已保存或未重定向到适当的页面和消息? 最佳答案 在Rails3中,update_all不返回任何有意义的信息,除了已更新的记录数(这可能取决于您的DBMS是否返回该信息)。http://ar.ru

  3. ruby - 使用 Vim Rails,您可以创建一个新的迁移文件并一次性打开它吗? - 2

    使用带有Rails插件的vim,您可以创建一个迁移文件,然后一次性打开该文件吗?textmate也可以这样吗? 最佳答案 你可以使用rails.vim然后做类似的事情::Rgeneratemigratonadd_foo_to_bar插件将打开迁移生成的文件,这正是您想要的。我不能代表textmate。 关于ruby-使用VimRails,您可以创建一个新的迁移文件并一次性打开它吗?,我们在StackOverflow上找到一个类似的问题: https://sta

  4. ruby - 我可以使用 Ruby 从 CSV 中删除列吗? - 2

    查看Ruby的CSV库的文档,我非常确定这是可能且简单的。我只需要使用Ruby删除CSV文件的前三列,但我没有成功运行它。 最佳答案 csv_table=CSV.read(file_path_in,:headers=>true)csv_table.delete("header_name")csv_table.to_csv#=>ThenewCSVinstringformat检查CSV::Table文档:http://ruby-doc.org/stdlib-1.9.2/libdoc/csv/rdoc/CSV/Table.html

  5. ruby-on-rails - 如何在 ruby​​ 中使用两个参数异步运行 exe? - 2

    exe应该在我打开页面时运行。异步进程需要运行。有什么方法可以在ruby​​中使用两个参数异步运行exe吗?我已经尝试过ruby​​命令-system()、exec()但它正在等待过程完成。我需要用参数启动exe,无需等待进程完成是否有任何ruby​​gems会支持我的问题? 最佳答案 您可以使用Process.spawn和Process.wait2:pid=Process.spawn'your.exe','--option'#Later...pid,status=Process.wait2pid您的程序将作为解释器的子进程执行。除

  6. ruby 正则表达式 - 如何替换字符串中匹配项的第 n 个实例 - 2

    在我的应用程序中,我需要能够找到所有数字子字符串,然后扫描每个子字符串,找到第一个匹配范围(例如5到15之间)的子字符串,并将该实例替换为另一个字符串“X”。我的测试字符串s="1foo100bar10gee1"我的初始模式是1个或多个数字的任何字符串,例如,re=Regexp.new(/\d+/)matches=s.scan(re)给出["1","100","10","1"]如果我想用“X”替换第N个匹配项,并且只替换第N个匹配项,我该怎么做?例如,如果我想替换第三个匹配项“10”(匹配项[2]),我不能只说s[matches[2]]="X"因为它做了两次替换“1fooX0barXg

  7. ruby - RSpec - 使用测试替身作为 block 参数 - 2

    我有一些Ruby代码,如下所示:Something.createdo|x|x.foo=barend我想编写一个测试,它使用double代替block参数x,这样我就可以调用:x_double.should_receive(:foo).with("whatever").这可能吗? 最佳答案 specify'something'dox=doublex.should_receive(:foo=).with("whatever")Something.should_receive(:create).and_yield(x)#callthere

  8. ruby - 检查数组是否在增加 - 2

    这个问题在这里已经有了答案:Checktoseeifanarrayisalreadysorted?(8个答案)关闭9年前。我只是想知道是否有办法检查数组是否在增加?这是我的解决方案,但我正在寻找更漂亮的方法:n=-1@arr.flatten.each{|e|returnfalseife

  9. ruby - 如何在 Ruby 中拆分参数字符串 Bash 样式? - 2

    我正在为一个项目制作一个简单的shell,我希望像在Bash中一样解析参数字符串。foobar"helloworld"fooz应该变成:["foo","bar","helloworld","fooz"]等等。到目前为止,我一直在使用CSV::parse_line,将列分隔符设置为""和.compact输出。问题是我现在必须选择是要支持单引号还是双引号。CSV不支持超过一个分隔符。Python有一个名为shlex的模块:>>>shlex.split("Test'helloworld'foo")['Test','helloworld','foo']>>>shlex.split('Test"

  10. ruby - 我可以使用 aws-sdk-ruby 在 AWS S3 上使用事务性文件删除/上传吗? - 2

    我发现ActiveRecord::Base.transaction在复杂方法中非常有效。我想知道是否可以在如下事务中从AWSS3上传/删除文件:S3Object.transactiondo#writeintofiles#raiseanexceptionend引发异常后,每个操作都应在S3上回滚。S3Object这可能吗?? 最佳答案 虽然S3API具有批量删除功能,但它不支持事务,因为每个删除操作都可以独立于其他操作成功/失败。该API不提供任何批量上传功能(通过PUT或POST),因此每个上传操作都是通过一个独立的API调用完成的

随机推荐