Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/57.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++_Regex_Grouping_Intersection - Fatal编程技术网

C++ 交集正则表达式与组,如何导出分组位的交集?

C++ 交集正则表达式与组,如何导出分组位的交集?,c++,regex,grouping,intersection,C++,Regex,Grouping,Intersection,我目前正试图解决一个类似的问题,除了我知道如何做交叉口,但有一个额外的要求 我打算使用的交集逻辑是Dragon Book将NFA转换为DFA的算法,但同时在两个NFA上执行。由于所有DFA都是NFA,但几乎没有非确定性,因此您可以根据需要对更多交叉口重复此操作 我的问题是,我的一个正则表达式有一些组,可以作为新正则表达式的一部分进一步使用。具体地说: bin/x86/a.out:obj/x86/*\.o obj/{[a-zA-Z0-9]+}/{.*}.o:src/\2.c 在第一行的末尾,我有一

我目前正试图解决一个类似的问题,除了我知道如何做交叉口,但有一个额外的要求

我打算使用的交集逻辑是Dragon Book将NFA转换为DFA的算法,但同时在两个NFA上执行。由于所有DFA都是NFA,但几乎没有非确定性,因此您可以根据需要对更多交叉口重复此操作

我的问题是,我的一个正则表达式有一些组,可以作为新正则表达式的一部分进一步使用。具体地说:

bin/x86/a.out:obj/x86/*\.o

obj/{[a-zA-Z0-9]+}/{.*}.o:src/\2.c

在第一行的末尾,我有一个正则表达式,它匹配x86目标的所有对象。在第二行中,我有一个正则表达式,它指定了一个可能的构建行,它应该将第一个组与固定的x86相匹配,将第二个组与后面的任何给定字符串相匹配。在本例中,尚未使用第一个匹配项,但它应该是可检索的。为了确保匹配结束并允许递归规则,我想在匹配第二个正则表达式时使用从第一个正则表达式获得的信息。通过从第一行获取第二个正则表达式和从第二行获取第一个正则表达式来选择规则,并确定两个正则表达式的交点和由交点生成的DFA是否具有接受状态。如果是这样的话,就有两个都可以解析的句子,因此组可以接受一些值

一般来说,是否可以从第一个正则表达式中提取信息以用于匹配第二个正则表达式的组


如果不是一般情况,我需要添加什么样的限制?

我认为反勾号会使语言变得不规则,因此您无法将其转换为有限自动元。

我认为反勾号会使语言变得不规则,因此您无法将其转换为有限自动元

为什么您的示例看起来像Makefile规则,即使Makefiles不支持正则表达式

因为这正是我想说的,不是有意的双关语

您使用哪个正则表达式库

目前还没有。我正在考虑根据这个问题的结果写我自己的。如果这是不可能的,我可以让现有的一个支持这一点。如果这在理论上是可能的,我将开发自己的应用程序来实现这一点&按照我的意愿制作应用程序

有些支持先行表达式,这是表达式交叉点的另一种方式

交集背后的思想是定义通用的规则,可以包含多个不同的左侧部分(在通常的makefile中使用%),但如果有多个变化点(例如平台、构建类型或文件名),则不需要执行某种递归make。如果我不能为组考虑第二个正则表达式,我就不能递归地使用这样的规则,因为递归在每个步骤/级别之间不会有任何变化。这将减少遗传性,但仍然可以接受。尽管如此,了解IE的答案仍然是一个有趣的问题,它是否可以一般地完成,并将决定我对正则表达式库的要求

因为我丢失了我的cookie,所以没有以原始作者的身份发布&我正在等待合并帐户

为什么您的示例看起来像Makefile规则,即使Makefiles不支持正则表达式

因为这正是我想说的,不是有意的双关语

您使用哪个正则表达式库

目前还没有。我正在考虑根据这个问题的结果写我自己的。如果这是不可能的,我可以让现有的一个支持这一点。如果这在理论上是可能的,我将开发自己的应用程序来实现这一点&按照我的意愿制作应用程序

有些支持先行表达式,这是表达式交叉点的另一种方式

交集背后的思想是定义通用的规则,可以包含多个不同的左侧部分(在通常的makefile中使用%),但如果有多个变化点(例如平台、构建类型或文件名),则不需要执行某种递归make。如果我不能为组考虑第二个正则表达式,我就不能递归地使用这样的规则,因为递归在每个步骤/级别之间不会有任何变化。这将减少遗传性,但仍然可以接受。尽管如此,了解IE的答案仍然是一个有趣的问题,它是否可以一般地完成,并将决定我对正则表达式库的要求


未以原始作者身份发布,因为我丢失了cookie&我正在等待合并帐户。

我想您是指\1等的后面引用在转换为NFA之前已被原始版本的子NFA或子正则表达式替换。这使他们又正常了。事情
这需要从左手边的亚NFA,这正是我在这个问题上所要求的。使用完整的组可能太大,并且会阻止递归,使用第二个正则表达式来减少它是一个问题。我假设从NFA到DFA的转换对于修改后的NFA也是有效的,它也会匹配组,但事实并非如此。平凡的a*{a*}在匹配上会有困难,并且可以以多种方式匹配a的字符串,特别是改变组内匹配的内容。所以,如果不知道这部分的背后是什么,就没有办法与之相匹配。我会保持思考的上限;可能会出现其他解决方案。我想您是指\1等的后面引用在转换为NFA之前,会被源代码中的子NFA或子正则表达式替换。这使他们又正常了。需要的是左手边的亚NFA,这正是我在这个问题中所要求的。使用完整的组可能太大,并且会阻止递归,使用第二个正则表达式来减少它是一个问题。我假设从NFA到DFA的转换对于修改后的NFA也是有效的,它也会匹配组,但事实并非如此。平凡的a*{a*}在匹配上会有困难,并且可以以多种方式匹配a的字符串,特别是改变组内匹配的内容。所以,如果不知道这部分的背后是什么,就没有办法与之相匹配。我会保持思考的上限;也许会出现其他解决方案。通常情况下:不会。为什么您的示例看起来像Makefile规则,即使Makefiles不支持正则表达式?您使用哪个正则表达式库?有些支持前瞻表达式,这是表达式交叉的另一种方式。一般来说:不支持。为什么您的示例看起来像Makefile规则,即使Makefiles不支持正则表达式?您使用哪个正则表达式库?有些支持先行表达式,这是表达式交叉点的另一种方式。