我需要帮助检查我的Regexp。
内容:
我有一个脚本,需要一个Excel文件作为输入导入数据库中的产品,有一个特殊的字段,需要“额外的关键字”的产品,该产品可以有3个额外的关键字,他们必须由逗号分隔。
- 钥匙只能有字母和数字
- 键不能只有0,并且每个键限制为20个字符
因此,我为检查“extra keys”字段而创建的Regexp是
/^((?!0+,?$)(?! +,?$)[A-Z0-9 ]{1,20},?){0,3}$/
因此,我可以稍后在服务器中通过“,”(逗号)拆分它,Regexp中接受空格,因为我打算在拆分之前将所有空格替换为空字符串
我的问题是,这个regexp行吗?
我使用过正则表达式,但这是我第一次使用负前瞻表达式。
如果它不正确,你能帮我得到正确的regexp吗?
谢谢你,谢谢!
- -编辑-*
正如我刚才在Reilas的接受答案中的注解中所说的那样,我的RegExp根本不正确,因为它接受0 s+空格,所以当我用空格替换空字符串时,我会得到0 s,这对我的情况是无效的。
2条答案
按热度按时间d7v8vwbk1#
如果键只能包含字母和数字,并且不能只包含零,并且字符串中其他可接受的字符是可选空格之间的逗号,则可以使用单个负向前查找来排除2个单词边界之间的零:
模式匹配:
^
字符串开头(?!.*?\b0+\b)
负前瞻,不仅在字边界之间Assert零*[A-Z\d]{1,20}
匹配可选空格,然后是1-20个字符A-Z或数字(?:
非捕获组*, *
在可选空格之间匹配逗号[A-Z\d]{1,20}
匹配1-20个字符A-Z或数字){2}
关闭非捕获组并重复2次*
匹配可选空格$
字符串结尾参见regex demo。
如果不允许有空格:
Regex demo
pinkon5k2#
它工作正常,周围的“看”是正确的。
这里有一个类似的模式。
如果您使用的是 PCRE regex引擎,则可以通过引用捕获组来简化模式。