Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/266.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
Javascript Regex来检测双引号外的模式_Javascript_C#_.net_Regex_String - Fatal编程技术网

Javascript Regex来检测双引号外的模式

Javascript Regex来检测双引号外的模式,javascript,c#,.net,regex,string,Javascript,C#,.net,Regex,String,我有一根像 FIND files where file2=29 AND file32="12" OR file623134="file23" 此文本由用户输入以搜索其数据。这将由应用程序转换为SQL查询 例如:FIND替换为SELECT,并使用模式file[number](例如:file2、file32和file623134,如上面的字符串所示)转换为file\u ID=[number]和file\u VALUE=[file[number]的值。生成的SQL查询将是: SELECT * FRO

我有一根像

FIND files where file2=29 AND file32="12" OR file623134="file23"
此文本由用户输入以搜索其数据。这将由应用程序转换为SQL查询

例如:
FIND
替换为
SELECT
,并使用模式
file[number]
(例如:
file2
file32
file623134
,如上面的字符串所示)转换为
file\u ID=[number]和file\u VALUE=[file[number]的值
。生成的SQL查询将是:

SELECT * FROM [FILES] WHERE (FILE_ID=2 AND FILE_VALUE=29) AND (FILE_ID=32 AND FILE_VALUE="12") OR (FILE_ID=623134 AND FILEVALUE="file23")
到目前为止,在其他so问题的帮助下,我实现了使用以下正则表达式检测双引号之外的字符串:

(?<![\S"])([^"\s]+)(?![\S"])

(?您可以使用以下字符串检测您的文件:

文件([0-9]+)=\”([0-9]+)\”

此正则表达式返回3个字符串,即整个匹配项、字符串中的第一个数字和第二个数字

我希望这是你所期望的

但是我认为您在正则表达式的使用中遗漏了一点:

将多个标记用括号括起来,将它们组合在一起。然后可以对组应用量词。例如,Set(Value)?匹配Set或SetValue

括号创建一个捕获组。上面的示例有一个组。匹配后,如果集合匹配,则组号1不包含任何内容。如果集合值匹配,则组号1包含值。如何访问组的内容取决于您使用的软件或编程语言。组号0始终包含整个正则表达式ch

发件人:


因此,您必须为整行定义一个正则表达式,并为要提取的每个子字符串创建一个匹配组。

您可以使用以下字符串检测您的文件:

文件([0-9]+)=\”([0-9]+)\”

此正则表达式返回3个字符串,即整个匹配项、字符串中的第一个数字和第二个数字

我希望这是你所期望的

但是我认为您在正则表达式的使用中遗漏了一点:

将多个标记用括号括起来,将它们组合在一起。然后可以对组应用量词。例如,Set(Value)?匹配Set或SetValue

括号创建一个捕获组。上面的示例有一个组。匹配后,如果集合匹配,则组号1不包含任何内容。如果集合值匹配,则组号1包含值。如何访问组的内容取决于您使用的软件或编程语言。组号0始终包含整个正则表达式ch

发件人:

因此,您必须为整行定义一个正则表达式,并为要提取的每个子字符串创建一个匹配组。

如下所示

<div id="date">file23="125"</div>
像这样

<div id="date">file23="125"</div>

这里是另一个两步方法:

  • 获取包含ID的键值对,并使用反向引用进行替换
  • 用另一个文本替换开头部分(一个文本
    “查找其中的文件”
    ),从“
中的[文件]中选择* :

结果:

从[FILES]中选择*,其中(FILE_ID=2和FILE_VALUE=29)和(FILE_ID=32和FILE_VALUE=12)或(FILE_ID=623134和FILE_VALUE=file23)

正则表达式细分:

  • \b文件
    -前面没有单词字符的文本
    文件
    文本
  • (\d+)
    -捕获到组1中的一个或多个数字
  • =
    -文字
    =
  • “?
    -1或0双引号
  • (\w+)
    -第二个捕获组,由1个或多个字母数字符号(字母、数字或下划线)组成
  • “?
    -1或0双引号

这里是另一个两步方法:

  • 获取包含ID的键值对,并使用反向引用进行替换
  • 用另一个文本替换开头部分(一个文本
    “查找其中的文件”
    ),从“中的[文件]中选择*
:

结果:

从[FILES]中选择*,其中(FILE_ID=2和FILE_VALUE=29)和(FILE_ID=32和FILE_VALUE=12)或(FILE_ID=623134和FILE_VALUE=file23)

正则表达式细分:

  • \b文件
    -前面没有单词字符的文本
    文件
    文本
  • (\d+)
    -捕获到组1中的一个或多个数字
  • =
    -文字
    =
  • “?
    -1或0双引号
  • (\w+)
    -第二个捕获组,由1个或多个字母数字符号(字母、数字或下划线)组成
  • “?
    -1或0双引号

假设我们正在匹配
查找文件,其中file2=29和file32=“12”或file623134=“file23”

作为解释,我将分步骤进行

显然,与字符串完全匹配的正则表达式将匹配

FIND files where file2=29 AND file32="12" OR file623134="file23"

首先,让我们决定要从中读取哪些位…并使其可访问

FIND (files) where file(2)=(29) AND file(32)=("12") OR file(623134)=("file23")

在这里,我们将要读出的所有位用括号括起来。这将这些位定义为“捕获组”。在C#中,我们可以给它们命名。我们稍后会这样做

现在…让我们对这个正则表达式进行泛化,使其匹配更多的示例。键是数字,因此我们可以用
[0-9]+
捕获它们。这意味着
至少匹配一次0到9范围内的字符

FIND (files) where file([0-9]+)=(29) AND file([0-9]+)=("12") OR file([0-9]+)=("file23")

好的。现在值…这里有一些字符串。让我们匹配这些

字符串不是由“.”或“[^”]+”
(注意..加号表示我们不能匹配空字符串,因为我们至少需要一个字符。
*
将允许您匹配空字符串。)

本例中的一个值是数字。因此,让我们假设它们可以是整数

FIND (files) where file([0-9]+)=([0-9]+) AND file([0-9]+)=("[^"]+") OR file([0-9]+)=("[^"]+")

第一个示例没有什么特别之处。因此,让我们假设所有值都可以是字符串或整数。要生成两个选项,我们使用
选项匹配器。(现在..我想您是
FIND (files) where file([0-9]+)=(29) AND file([0-9]+)=("12") OR file([0-9]+)=("file23")
FIND (files) where file([0-9]+)=(29) AND file([0-9]+)=("[^"]+") OR file([0-9]+)=("[^"]+")
FIND (files) where file([0-9]+)=([0-9]+) AND file([0-9]+)=("[^"]+") OR file([0-9]+)=("[^"]+")
FIND (files) where file([0-9]+)=("[^"]+"|[0-9]+) AND file([0-9]+)=("[^"]+"|[0-9]+) OR file([0-9]+)=("[^"]+"|[0-9]+)
FIND (files) where file([0-9]+)=("[^"]+"|[0-9]+) (AND) file([0-9]+)=("[^"]+"|[0-9]+) (OR) file([0-9]+)=("[^"]+"|[0-9]+)
FIND (files) where file([0-9]+)=("[^"]+"|[0-9]+)( (AND|OR) file([0-9]+)=("[^"]+"|[0-9]+))*
FIND (files) where file([0-9]+)=([^\s]+)( (AND|OR) file([0-9]+)=([^\s]+))*
FIND (files) where file([0-9]+)=("[^"]+"|[^\s]+)( (AND|OR) file([0-9]+)=("[^"]+"|[^\s]+))*
FIND (files) where file([0-9]+)=("(?:\\"|[^"])+"|[^\s]+)( (AND|OR) file([0-9]+)=("(?:\\"|[^"])+"|[^\s]+))*
FIND (?<table>files) where file(?<key>[0-9]+)=(?<value>"(?:\\"|[^"])+"|[^\s]+)( (?<operator>AND|OR) file(?<key>[0-9]+)=(?<value>"(?:\\"|[^"])+"|[^\s]+))*
FIND (?<table>files)( (?<operator>AND|OR|where) file(?<key>[0-9]+)=(?<value>"(?:\\"|[^"])+"|[^\s]+))+
var pair = @"(?<pair>file(?<key>[0-9]+)=(?<value>"(?:\\\"|[^\"])+\"|[^\s]+))";
var query = @"FIND (?<table>files) where "+pair+"( (?<operator>AND|OR) "+pair+")*";
var ex = new Regex(query);
var query = @"FIND (?<table>files)(?<condition> (?<operator>AND|OR|where) file(?<key>[0-9]+)=(?<value>"(?:\\\"|[^\"])+\"|[^\s]+))+";
var ex = new Regex(query);
var match = ex.Match(...);
... match.Groups["table"].Value ...