我想让正则表达式验证的结构如下所示:
keyword input(param_input,param_input2)
"keyword"Section需要内置到正则表达式中,所以它不被视为输入。
输入,param_input和param_input2可以是字母(包括大写字母)、数字和_,但这些输入都不能完全是数字。
写一个正则表达式字符串来验证字符串的最好方法是什么?
尝试:
function+s+[a-zA-Z0-9]+((?!.*[,]{2})(?!.*[,0-9]{2})(?!^$,{1})[a-zA-Z0-9,]*)
您可以使用负向前看断言来确保您捕获的字符不是纯数字。试试这个:
^[w]+ (?!d+()([w]+)((?:(?!d+[,)])(w+)),(?:(?!d+[,)])(w+)))$
演示。
keyword input(param_input,param_input2) -> Will match
keyword 12345(param_input,param_input2)
keyword in123(abc123_DEF4,a1_b2_C3_d45) -> Will match
keyword input(12345678901,param_input2)
keyword input(param_input,123456789012)
keyword input(12345678901,123456789012)
keyword XYZ98(aaaa1111BB2,CCCCCCC33333) -> Will match
keyword XYZ98(aaaa1111BB2,CCCCCCC33333,DD44)
地点:
^[w]+
-匹配初始字符串,例如keyword
(?!d+()([w]+)(
-使用负向前看断言,匹配下一部分直到(
,只有当它不是纯粹的数字,例如input(
但不是12345(
(?:(?!d+[,)])(w+)),
-再次使用负向前看断言,仅当时匹配下一部分直到,
它不是纯粹的数字,例如param_input,
但不是12345678901,
(?:(?!d+[,)])(w+)))$
-再次使用负向前看断言,匹配下一部分直到结束)
只有当它不是纯粹的数字,例如param_input2)
但不是123456789012))
这固定为2x输入参数,例如(param_input,param_input2)
。请注意,如果您希望接受可变数量的输入参数,例如(param1,param2,param3,...,paramN)
,您无法轻松地使用regex组,正如另一个线程的回答所解释的那样。
- 你可以做的是为每个额外的参数手动定义这个
(?:(?!d+[,)])(w+)),
。
引用:
- https://www.ocpsoft.org/tutorials/regular-expressions/and-in-regex/