【发布时间】:2020-10-21 23:03:23
【问题描述】:
我正在尝试为我正在编码的搜索命令解析过滤器。用户可以使用一个或多个参数进行搜索。值可以有空格(如果有,必须用双引号括起来)。另外,我已经声明了几个“运算符”,它们是:=(用于等于)、:=(用于开头)、=:(用于结尾)和*(用于包含)。
例如:
name=John name:="John Doe" name*"ohn Do"
必须匹配:name=John、name*"John Doe"、name*"ohn Do"
我尝试过使用正则表达式 (C#),但是当它不包含引号时它不会匹配字符串。到目前为止,这是我想出的:
Regex.Matches(input, "(name(=|:=|=:|\\*)([^\"](\\S+)) | (name(=|:=|=:|\\*)\"([^\"]*)\"))", RegexOptions.IgnoreCase);
这基本上匹配单词“name”,后跟一个运算符,后跟一个空格,或者相同但直到结束双引号。但它不匹配任何东西。
实际上,我用foreach 中的几个关键字替换了“name”,但为了简单起见,我们只匹配“name”这个词。
无论如何,有什么想法我可能做错了吗?
【问题讨论】: