c#条件运算符的正则表达式,例如eq:2, ne:3



我想用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

最新更新