java正则表达式 子匹配_正则表达式多个匹配子字符串

我有一个应用程序,根据perl正则表达式确定它是否应该显示下拉菜单或简单的输入字段 . 因此,我必须检查正则表达式模式的“外形”和子串 . 为此,我想出了几个解决方案 .

给定输入模式“^(100 | 500 | 1000)$”,这将导致下拉菜单中有三个条目,100,500和1000.我需要一个正则表达式来解析整个模式,以确定它是否是有效列表,以及一个执行实际子字符串匹配的正则表达式,因为我不知道如何多次匹配一个子字符串 . 这是我的正则表达式模式:

^\^\((?:((?:[^\|]|\\\|)+)(?:\||(?:\)\$$)))+

一点点简化,因为这个正则表达式有点模糊:

^\^\((?:([\w\d]+)(?:\||(?:\)\$$)))+

这可以工作,但只存储最后一个子字符串(在给定的情况下为1000)并抛弃其余部分,使用PCRE和在线正则表达式工具进行测试 . 为了得到实际的子串,即下拉菜单字段,我有:

(?:\^\()?((?:[^\|]|\\|)+)(?:\||(?:\)\$$))

再次简化:

(?:\^\()?([\w\d]+)(?:\||(?:\)\$$))

这与子字符串匹配但与其他正则表达式所做的下拉菜单模式语法不匹配(例如,这个也匹配“^(100 |”和子字符串“100”) . 我的问题是:有没有办法合并这些正则表达式只有一个模式匹配1)整个模式语法和2)实际的子串?

提前致谢,

杰里米

P.S . :抱歉,如果这是显而易见的,但我今天对所有这些正则表达式都非常纠结 .

样本数据:

输入正则表达式:^(100 | 500 | 1000)$

语法OK!

匹配的子串:100,500,1000

=>显示下拉菜单

输入正则表达式:^ [0-9a-fA-F] $

语法错了!

=>显示常规输入字段

输入正则表达式:^(foo | bar)$

语法OK!

匹配的子串:"foo","bar"

=>显示下拉菜单

输入正则表达式:^(foo | bar)[0-9] $

语法错了!

=>显示常规输入字段

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值