我有一个应用程序,它会根据Perl正则表达式来确定是显示下拉菜单还是简单的输入字段。因此,我必须检查正则表达式模式是否具有"外部形式"和子字符串。为此,我想出了几种解决方案。
对于输入模式"^(100|500|1000)$",应该得到一个带有三个条目(100、500和1000)的下拉菜单。我需要一个正则表达式来解析整个模式,以确定其是否是有效列表,以及一个实际的子字符串匹配正则表达式,因为我不知道如何多次匹配一个子字符串。这是我的正则表达式模式:
再次简化:
这个正则表达式可以找到子字符串,但不能匹配其他正则表达式的下拉菜单模式语法(例如,这个正则表达式也会匹配以"^(100|"开头的子字符串,如"100")。 我的问题是:有没有办法将这些正则表达式组合成一个只匹配1)整个模式语法和2)实际子字符串的模式?
谢谢!
Jeremy
附:抱歉如果这很明显,但今天我对所有这些正则表达式都感到混乱。
样本数据:
输入正则表达式:^(100|500|1000)$ 语法正确! 匹配的子字符串:100、500、1000 =>显示下拉菜单
输入正则表达式:^[0-9a-fA-F]+$ 语法错误! =>显示普通输入字段
输入正则表达式:^(foo|bar)$ 语法正确! 匹配的子字符串:"foo"、"bar" =>显示下拉菜单
输入正则表达式:^(foo|bar)[0-9]+$ 语法错误! =>显示普通输入字段
对于输入模式"^(100|500|1000)$",应该得到一个带有三个条目(100、500和1000)的下拉菜单。我需要一个正则表达式来解析整个模式,以确定其是否是有效列表,以及一个实际的子字符串匹配正则表达式,因为我不知道如何多次匹配一个子字符串。这是我的正则表达式模式:
^\^\((?:((?:[^\|]|\\\|)+)(?:\||(?:\)\$$)))+
稍微简化一下,因为这个正则表达式有些模糊:
^\^\((?:([\w\d]+)(?:\||(?:\)\$$)))+
这段代码能够工作,但是只会存储最后一个子字符串(在这个例子中是1000),并且舍弃其他的部分。使用PCRE或者在线正则表达式工具进行了测试。为了获取实际的子字符串,例如下拉菜单字段,我需要:
(?:\^\()?((?:[^\|]|\\|)+)(?:\||(?:\)\$$))
再次简化:
再次简化:
(?:\^\()?([\w\d]+)(?:\||(?:\)\$$))
这个正则表达式可以找到子字符串,但不能匹配其他正则表达式的下拉菜单模式语法(例如,这个正则表达式也会匹配以"^(100|"开头的子字符串,如"100")。 我的问题是:有没有办法将这些正则表达式组合成一个只匹配1)整个模式语法和2)实际子字符串的模式?
谢谢!
Jeremy
附:抱歉如果这很明显,但今天我对所有这些正则表达式都感到混乱。
样本数据:
输入正则表达式:^(100|500|1000)$ 语法正确! 匹配的子字符串:100、500、1000 =>显示下拉菜单
输入正则表达式:^[0-9a-fA-F]+$ 语法错误! =>显示普通输入字段
输入正则表达式:^(foo|bar)$ 语法正确! 匹配的子字符串:"foo"、"bar" =>显示下拉菜单
输入正则表达式:^(foo|bar)[0-9]+$ 语法错误! =>显示普通输入字段