java - 正则表达式继续匹配相似的模式
问题描述
我有 JCL 语句要与正则表达式模式匹配该语句如下所示
//name JOB optionalParam,keyword=param,keyword=param,keyword=param
实际声明如下
//ADBB503 JOB ,MSGCLASS=2,CLASS=P
//ABCD JOB Something,MSG=NTNG,CLASS=ABC
我尝试了一个正则表达式来分组匹配,但是最后一个关键字和参数将有 n 次我需要继续匹配直到它存在。
String regex= (\/\/)(\w+)(\s+)(JOB)(\s+)(\w+)?(,)([\w+=\w+]+);
我的试用版在下面给出的链接中 https://regex101.com/r/gUyRMV/1
我面临的错误是只有一个关键字=参数匹配。N个关键字和参数需要匹配。
解决方案
您可以匹配第一个捕获组中的作业语句并使用\G
来获取第 2 组中的参数:
(?:(//\w+\s+JOB(?: \w+)?)\h*|\G(?!^)),(\w+=\w+)
解释
(?:
非捕获组(
捕获组 1//\w+\s+JOB
匹配//
,1+字字符和JOB
(?: \w+)?
匹配可选参数
)
\h*` 关闭组并匹配 0+ 个水平空白字符|
或者\G(?!^)
在上一场比赛结束时断言位置,而不是在开始时
)
, 关闭非捕获组并匹配,
(
捕获组 2\w+=\w+
匹配 1+ 单词字符=
1 + 单词字符
)
关闭组
在java中
String regex = "(?:(//\\w+\\s+JOB(?: \\w+)?)\\h*|\\G(?!^)),(\\w+=\\w+)";
推荐阅读
- angular - 如何在 azure msal 中添加忘记密码和更改电话号码的自定义策略?
- javascript - 如何检查或避免 ERR_TIMED_OUT 错误?
- flow - 如何在红绿灯路口加装探测器?
- google-cloud-platform - 浏览器中的 javascript 如何打开与 GCP 负载均衡器后面特定后端的 socket.io 连接?
- azure-data-factory - Azure 数据工厂复制活动中的动态源
- azure-active-directory - 带有图形 API 的 Sharepoint WebPart
- python - 熊猫数据框中的多个日期格式为单个日期模式
- php - 如何将 pdo_sqlsrv 代码转换为 pdo_odbc?
- indoor-positioning-system - 定位系统的精度在哪些条件下可以推断精度?
- vue.js - 如何在 Vue 3 中将 Vue.extend 替换为构造函数