我如何使用正则表达式来验证输入字符串类似于这个概述的结构?



我想让正则表达式验证的结构如下所示:

keyword input(param_input,param_input2)

"keyword"Section需要内置到正则表达式中,所以它不被视为输入。

输入,param_inputparam_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/

最新更新