Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.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# Regexp<=/&燃气轮机;常规语言?_C#_Regex - Fatal编程技术网

C# Regexp<=/&燃气轮机;常规语言?

C# Regexp<=/&燃气轮机;常规语言?,c#,regex,C#,Regex,我知道,regexp与altenating有限自动机是等价的(读取一个符号,然后转换到下一个状态) 那么,这个regexp在c#中如何能够正常工作呢 var input=“bla bla bla bla”; Match=Regex.Match(输入@“”); 因为机器必须保持在“.”-状态,无论发生什么,都不能? 我认为正确的regexp如下所示: Match match = Regex.Match(input, @"<([^>]*)>"); Match=Regex.Mat

我知道,regexp与altenating有限自动机是等价的(读取一个符号,然后转换到下一个状态)

那么,这个regexp在c#中如何能够正常工作呢

var input=“bla bla bla bla”;
Match=Regex.Match(输入@“”);
因为机器必须保持在“.”-状态,无论发生什么,都不能? 我认为正确的regexp如下所示:

Match match = Regex.Match(input, @"<([^>]*)>");
Match=Regex.Match(输入@“]*)>”;

但是这两种方法都很好。

看看这些正则表达式在以下情况下的性能:

1.

bla bla bla bla  <I NEED THIS TEXT> bla bla bla <I need this text>
bla bla bla bla  <I NEED <something nested in> THIS TEXT>
<I NEED THIS TEXT "containing an attribute with ">" in it>
bla-bla-bla-bla-bla-bla
在这里,第一个正则表达式同时匹配
blablabla
,而不关心两个“标记”之间是否有文本

第二个正则表达式将分别匹配
。好极了但现在看看这个:

2.

bla bla bla bla  <I NEED THIS TEXT> bla bla bla <I need this text>
bla bla bla bla  <I NEED <something nested in> THIS TEXT>
<I NEED THIS TEXT "containing an attribute with ">" in it>
bla-bla-bla-bla

现在,正则表达式1匹配
和正则表达式2匹配
看看这些正则表达式在以下情况下的性能:

1.

bla bla bla bla  <I NEED THIS TEXT> bla bla bla <I need this text>
bla bla bla bla  <I NEED <something nested in> THIS TEXT>
<I NEED THIS TEXT "containing an attribute with ">" in it>
bla-bla-bla-bla-bla-bla
在这里,第一个正则表达式同时匹配
blablabla
,而不关心两个“标记”之间是否有文本

第二个正则表达式将分别匹配
。好极了但现在看看这个:

2.

bla bla bla bla  <I NEED THIS TEXT> bla bla bla <I need this text>
bla bla bla bla  <I NEED <something nested in> THIS TEXT>
<I NEED THIS TEXT "containing an attribute with ">" in it>
bla-bla-bla-bla

现在,正则表达式1匹配
并且正则表达式2匹配
您是对的,一个简单的正则表达式实现对您的示例不起作用。然而,许多引擎实现了这样一种功能,即允许它们到达输入字符串的末尾,确定没有进行匹配,然后从末尾开始向后工作,丢弃任何已进行得太过贪婪的
+
*
匹配,请注意
字符成功匹配,并迅速恢复成功


其他引擎实际上并不像我所描述的那样实现回溯,而是通过更聪明的机制实现相同的结果。

你说得对,简单的正则表达式实现对你的示例不起作用。然而,许多引擎实现了这样一种功能,即允许它们到达输入字符串的末尾,确定没有进行匹配,然后从末尾开始向后工作,丢弃任何已进行得太过贪婪的
+
*
匹配,请注意
字符成功匹配,并迅速恢复成功

其他引擎实际上并不像我所描述的那样实现回溯,而是通过更聪明的机制实现相同的结果。

回溯:。 当您使用以下代码时:

Match match = Regex.Match(input, @"<(.*)>");
Match-Match=Regex.Match(输入@“”);
正则表达式引擎解析输入字符串中的所有字符(并将“>”解析为“.*”匹配),但未找到任何匹配项。然后,它返回一个符号(最后一个“>”),并尝试在模式中将其解析为“>”。而且-它匹配!因此,它返回正确的字符串。

回溯:。 当您使用以下代码时:

Match match = Regex.Match(input, @"<(.*)>");
Match-Match=Regex.Match(输入@“”);

正则表达式引擎解析输入字符串中的所有字符(并将“>”解析为“.*”匹配),但未找到任何匹配项。然后,它返回一个符号(最后一个“>”),并尝试在模式中将其解析为“>”。而且-它匹配!所以,它返回正确的字符串。

好的,但我的问题是,1的结果如何。“机器”是否从“.”-状态?因为转换如下:--(“这称为回溯。
*
首先匹配整个字符串,但会记住沿途的每个字符位置。如果以下标记无法匹配,它将一次返回一个字符,直到可以再次匹配为止。好的,但我的问题是,1”机器是如何产生的从“.”-state?开始,因为转换如下:--("这称为回溯。
*
首先匹配整个字符串,但会记住沿途的每个字符位置。如果以下标记无法匹配,它将一次回溯一个字符,直到再次匹配为止。那么它与自动机不等价!为什么呢?自动机可以是确定性的/非确定性的。并且,如描述所示在我的链接中,ibed,.NET正则表达式引擎是不确定的有限状态机。那么它就不等同于自动机了!为什么呢?自动机可以是确定的/不确定的。而且,正如我的链接中所描述的,.NET正则表达式引擎是不确定的有限状态机。通过回溯,它是一个下推自动机,它必须记住之前的状态,不是吗t?使用回溯,它是一个下推自动机,它必须记住以前的状态,不是吗?我看不出你还期望什么。你期望什么?第一个不匹配,因为。*读取整个字符串-没有回溯。请注意术语“regex”已成为一个包含非规则方言的语言家族的固定术语。像零宽度断言这样的IIRC构造是不规则的。我看不出您还期望什么。您期望什么?第一个不匹配,因为。*读取整个字符串-没有回溯。请注意术语“regex”已经成为一个包含非正规方言的语言家族的固定术语。像零宽度断言这样的IIRC结构是不正规的。