【发布时间】:2014-10-11 19:22:20
【问题描述】:
我有一个应用程序,它根据 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]+$
语法错误!
=> 显示常规输入字段
【问题讨论】:
-
我不确定你的问题。你能把你有什么和你需要什么的样本数据作为输出吗?
-
感谢您的帮助!我添加了一些示例数据。
-
我已经用你提供的数据更新了我的答案