重复分析并取正则表达式以进行正则表达式

如何解决重复分析并取正则表达式以进行正则表达式

|| 我尝试使用Java解析规则并使用RegEx读取内部内容,但是由于我对RegEx并不陌生,所以发现了一些问题。 首先,我尝试使用此RegEx解析一个谓词(我不知道这是否太复杂):
\"([a-zA-Z]+)\\\\(([\\\\?]?[a-zA-Z0-9]+)?(,[\\\\?]?[a-zA-Z0-9]+)*\\\\)\"
,我只是发现这是完全错误的...谓词应该是这样的(我也是懒写完整的表达式),
p(),p(?a),p(?a,?b,c,?d)
。谓词名称必须是字符串(仅包含字母字符),参数是仅包含字母字符或以
?
开头的字符串。 给定元素
p(a,b,c)
,我发现这里有两个问题: 当我循环查看每个组的元素时(使用
Matcher
),结果只有
p(a,c)
p
a
,c
,我又如何检索
b
? 如何在组中不包括
,
(逗号),请注意重复项也应包括该字符? 另一种情况,当我输入
p()
时,为什么会得到一个元素为
null
的组? 任何想法如何解决这个问题?     

解决方法

        最长的示例字符串中的\“ arg \”值之一是
?b?
,似乎与您的描述不符。删除它,并且您的正则表达式与所有示例匹配,但是仍然存在提取单个参数的问题。在Java中,最简单的方法是将所有参数捕获为一个字符串,然后拆分该字符串以分解出各个参数。 正如@Tomalak所说,您的正则表达式非常好;我唯一看到的错误是代表第一个参数的组之后的ѭ2。它应该控制整个参数字符串,而不仅仅是第一个参数。我的意思是,如果没有第一个参数,就没有意义要寻找第二个,第三个,等等。这是我的处理方式:
(?:[?]?[a-zA-Z0-9]+(?:,[?]?[a-zA-Z0-9]+)*)?
这将不匹配任何内容,或者不匹配一个参数,或者不匹配多个以逗号分隔的参数,但不会匹配(例如)
,a
,?a,b
,就像您的正则表达式一样。这是Java字符串文字形式的完整正则表达式:
\"([a-zA-Z]+)\\\\(((?:\\\\??[a-zA-Z0-9]+(?:,\\\\??[a-zA-Z0-9]+)*)?)\\\\)\"
谓词名称在组#1中捕获,参数在组#2中捕获。如果没有参数,则组2将包含一个空字符串(不是
null
)。否则,您可以通过用逗号将其分开来分解各个参数。 顺便说一句,您可以使用反斜杠(
\\?
)或方括号(
[?]
)来转义大多数元字符;您不需要两者都做。如果它只是一个字符(即不是像
[!.?]
这样的真实字符类的一部分),我建议使用反斜杠。我知道它与Java中的字符数相同,但是我认为反斜杠使它更具了自我说明性。 编辑:这是我使用的代码:
String[] inputs = { \"p()\",\"p(?a)\",\"p(?a,?b,c,?d)\",\"p(a,b,c)\" };
Pattern p = Pattern.compile(
    \"([a-zA-Z]+)\\\\(((?:\\\\??[a-zA-Z0-9]+(?:,\\\\??[a-zA-Z0-9]+)*)?)\\\\)\");

for ( String s : inputs )
{
  Matcher m = p.matcher(s);
  if ( m.matches() )
  {
    System.out.printf(\"%nFull match: %s%nPredicate name:%n  %s%n\",m.group(),m.group(1));
    String allArgs = m.group(2);
    if (allArgs.length() == 0)
    {
      System.out.println(\"No arguments\");
    }
    else
    {
      System.out.println(\"Arguments:\");
      for (String arg : allArgs.split(\",\"))
      {
        System.out.printf(\"  %s%n\",arg);
      }
    }
  }
}
    ,           给定元素p(a,b,c),我发现这里有两个问题 您无法(轻松)使用正则表达式执行此类操作。 (在Perl中,您可以使用一些技巧来做到这一点。) 像
(?:,(\\w+))
  另一种情况,当我输入p()时,为什么会得到其中元素为null的组? 因为应该匹配“参数”的组根本不匹配,因此未定义。这就是捕获组的工作方式。比赛结束后,您可以随时选择/过滤抱怨声。 您想为此使用/构造一个适当的解析器,而不仅仅是使用一个正则表达式。     ,        \“谓词应该是这样的(我懒得写完整的表达式),p(),p(?a),p(?a,?b?,c,?d)。” 我想添加评论,但ie6给我带来麻烦。如果您提供更好的解释,我会给您解决方案。 您正在处理的是文本!不要尝试将其粉饰为更奢侈的东西。 “懒惰”并不能解释ѭ25的含义。每个单独的文字字符/符号都必须完全理解。 正则表达式功能强大且可能令人生畏。正则表达式(抽象)不能为 从抽象推断。 抱歉,我无法理解参数。我要删除我的帖子... (显然,我无法删除它。如果有人可以为我删除它,谢谢!)     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 <select id="xxx"> SELECT di.id, di.name, di.work_type, di.updated... <where> <if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 <property name="dynamic.classpath" value="tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams['font.sans-serif'] = ['SimHei'] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -> systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping("/hires") public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate<String
使用vite构建项目报错 C:\Users\ychen\work>npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-