我想用c#为字符串写一个正则表达式,它可以包含任何操作符和操作数值。这些操作符是字符串字符,如eq for equals, ct = contains &Bt表示between, eq表示equals。
我得到字符串后端像eq=4。但是在测试期间,有人用我的API的垃圾值测试了我的代码,字符串是eq:**+4。
现在我想构建一个正则表达式,这样它将根据正则表达式值验证字符串,如eq:5或bt:8-9。
注:除between操作符外,其他操作符不应具有类似eq:4-6的值。我已经做了这个@"^b(eq | ne | gt | lt | ge | le | ct | bt)wb: ?(d | -) ?
d">似乎很接近,但需要一些指导才能使其正常工作。
欢迎任何帮助或建议。
可以使用
@"^(eq|[gln]e|[bclg]t)s*:s*d+(?:.d+)?(?:-d+(?:.d+)?)?z"
参见regex演示。细节:
^
-字符串 起始(eq|[gln]e|[bclg]t)
s*:s*
-冒号包含零个或多个空格d+(?:.d+)?
-一个int/float数(一个或多个数字,然后是一个点和一个或多个数字的可选序列)(?:-d+(?:.d+)?)?
--
的可选序列,一个或多个数字,然后是一个点和一个或多个数字的可选序列z
-字符串的最后。
查看。net regex中$
和z
锚点的区别。
编辑:
似乎只接受bt
范围,所以您需要
@"^(?:eq|[gln]e|[clg]t|(bt))s*:s*d+(?:.d+)?(?(1)(?:-d+(?:.d+)?)?)z"
(eq|ne|gt|lt|ge|le|ct|bt):-?[0-9]+(--?[0-9]+)?
或与命名组:@"(?<operator>eq|ne|gt|lt|ge|le|ct|bt):(?<firstValue>-?[0-9]+)(-(?<secondValue>-?[0-9]+))?$"
无负值:@"(?<operator>eq|ne|gt|lt|ge|le|ct|bt):(?<firstValue>[0-9]+)(-(?<secondValue>[0-9]+))?$"
demo: https://regex101.com/r/HWnIq9/1