Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.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#regex解析以下内容_C#_Regex - Fatal编程技术网

如何使用C#regex解析以下内容

如何使用C#regex解析以下内容,c#,regex,C#,Regex,我有这样一段文字:“((FIELD1_名称,如'Product%')和(Instr(FIELD1_名称,'Product_typ')=1))” 我想从字符串的Instr部分解析FIELD1\u NAME和Product\u typ 这不起作用:@“Instr((?[A-Z0-9+),“(?([^']|('')+)”您需要转义Instr之后的第一个(),并将值组中的组设为非捕获组 Instr\((?<column>[A-Z0-9_]+),\s*'(?<value>(?:[^

我有这样一段文字:
“((FIELD1_名称,如'Product%')和(Instr(FIELD1_名称,'Product_typ')=1))”

我想从字符串的
Instr
部分解析
FIELD1\u NAME
Product\u typ


这不起作用:
@“Instr((?[A-Z0-9+),“(?([^']|('')+)”
您需要转义
Instr
之后的第一个
),并将
组中的组设为非捕获组

Instr\((?<column>[A-Z0-9_]+),\s*'(?<value>(?:[^']|(''))+)'
Instr\(?[A-Z0-9]+),\s*'(?(?:[^']|('')+)

此正则表达式使用惰性量词上的点all来获取var。
主要是修剪,因为你没有说明这是为了验证

 # @"(?s)Instr\s*\(\s*(?<feild>.*?)\s*,\s*'\s*(?<prodtype>.*?)\s*'\s*\)"

 (?s)
 Instr
 \s* 
 \(
 \s* 
 (?<feild> .*? )               #_(1)         
 \s* , \s* 
 '
 \s* 
 (?<prodtype> .*? )            #_(2)         
 \s* 
 '
 \s* 
 \)
\@“(?s)Instr\s*\(\s*(?*?)\s*,\s*'\s*(?*?)\s*”\s*\)
(?s)
仪表
\s*
\(
\s*
(? .*? )               #_(1)         
\s*,\s*
'
\s*
(? .*? )            #_(2)         
\s*
'
\s*
\)

你需要的是一个解析器,而不是正则表达式。无论你现在对正则表达式做什么,都注定会成为一个黑客。去做真正的事情,编写一个简单的递归下降解析器。你想用这个
([^']|('')+
?@sin-
([^']|“”)+“
匹配一个(非空)单引号字符串,其中一个引号是“转义的”通过将两个字符串放在一行中。(类似于C#的
@“…”
字符串样式)。也就是说,它正确地解析这样编码的字符串:
“太酷了!”