Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 确定字符串和解析参数中的规则类型_C# - Fatal编程技术网

C# 确定字符串和解析参数中的规则类型

C# 确定字符串和解析参数中的规则类型,c#,C#,我有一个包含筛选规则的字符串: String rule = "%john" 可用的规则类型包括: Equal = "value" StartsWith = "value%" EndsWith = "%value" In = "in(value1,value2,value3)" Range = [min;Max] Min = [min;] Max = [;Max] 否定:前面的一个用!之前 例如:“![min,Max]” 给定其中一条规则,如何确定规则类型(相等、范围等)并获

我有一个包含筛选规则的字符串:

String rule = "%john"
可用的规则类型包括:

Equal = "value"
StartsWith = "value%"
EndsWith = "%value" 
In = "in(value1,value2,value3)"  
Range = [min;Max]  
Min = [min;]  
Max = [;Max]  
否定:前面的一个用!之前 例如:“![min,Max]”

给定其中一条规则,如何确定规则类型(相等、范围等)并获取该规则的参数(值、最小值、最大值等)


我应该用正则表达式吗?我对正则表达式不是很熟悉。

好吧,在最简单的情况下(没有转义符号),没有wierd情况(例如当
[1;2]
应被视为“等于字符串'[1;2]'”),您可以单独使用正则表达式:

然而,如果有转义符号等的可能性,我建议实现一个解析器

编辑:通常,我们从语法开始,例如,我们可能会

  Types - int    (e.g. 123)      
          float  (e.g. -1.23e-54)
          string (e.g. abc, "123", ab%c, ab_c, ab\%c, ab\_c, 100\%, ab\"c, ab\\c, "in")  
请注意,我已经在
%
中添加了
;为了区分字符串和整数/浮点数,我引入了
”(例如
100
是整数,
“100”
是字符串)。最后,我添加了\作为转义字符(例如,如果您想找出单引号,可以将
\”
“\”

操作

  equals   (including wild cards)
  in       (including wild cards)
  range    (min, max, range) 
  negation (the only boolean operation)
然后,您可以实现多级解析器:

  • 标记器
  • 分析器
  • 验证器
  • 建筑商
例如,为了

  !!in (12%3, ab\%c, pq_x%)
我们可以

  Tokenization: "!", "!", "in", "(", "12%3", "ab\%c", "pq_x%", ")"
  Parsing:      "negation", 
                "negation", 
                 "in" (with three arguments: "12%3", "ab\%c", "pq_x%")
  Validating:   syntax is valid 
  Builder:      My_Field like '12%3' or 
                My_Field like '12\%3' escape '\' or
                My_Field like 'pq_x%'

规则可以与and或?例如
“value |[min;max]”
?如果我想等于但有奇怪的值怎么办?例如,我想等于
“[123;]”“
(不包括范围!)。你有转义符号或其他东西吗?似乎你可以很容易地从字符串中确定规则(例如,如果
规则。StartWith(“%”
),那么它就是StartWith规则).那么你尝试过什么?问题出在哪里?@Dmitry Bychenko:规则不能组合。它们已经是孤立的了。@DmitryBychenko我不认为相等“[123;]”但我不认为会有这样的情况。你有什么建议?你能澄清一下“我建议实现一个解析器”吗"? 什么意思?使用正则表达式不是一种解析方法吗?
  equals   (including wild cards)
  in       (including wild cards)
  range    (min, max, range) 
  negation (the only boolean operation)
  !!in (12%3, ab\%c, pq_x%)
  Tokenization: "!", "!", "in", "(", "12%3", "ab\%c", "pq_x%", ")"
  Parsing:      "negation", 
                "negation", 
                 "in" (with three arguments: "12%3", "ab\%c", "pq_x%")
  Validating:   syntax is valid 
  Builder:      My_Field like '12%3' or 
                My_Field like '12\%3' escape '\' or
                My_Field like 'pq_x%'