使用反向引用作为条件的 C++11 正则表达式

C++11 Regular Expression Using Back Reference as Condition

我知道不能在字符中使用反向引用 类,但我需要这个功能。我想知道是否有其他有效的正则表达式可用于完成此操作。

前提:我正在使用 Visual Studio 2013。它必须在该环境中工作(即 std::regex)。

作为一个简化的例子,我希望执行的是在仅包含大写罗马字母(即 A-Z)的单词列表中进行搜索,例如假设表达式:

"^(.)([A-])([-Z])$"

理想情况下 return 匹配 3 个字母的单词,其中第二个字符在词汇上小于或等于第一个字符,第三个字符在词汇上大于或等于第二个字符.示例匹配包括 "CAT" 和 "EEL",但不包括 "COW" 或 "PIG".

那么,是否有一个比较简单的正则表达式(不包括 26×N 指数交替条件)可以做到这一点?还是我应该自己编写代码来执行此操作?

附录: 没有收到简化案例的替代有效正则表达式我相信回答了我的问题,因为我只需要编写自己的代码来执行这样的搜索。

要了解现实世界的问题,我将简单地指导您:

http://joeslater.orgfree.com/ZigWord/tutorial.html

本教程可能足以理解问题,但提供了一些谜题,当然欢迎您尝试。它们都是手工生成的。我需要我的程序使用可供选择的单词列表来生成此类谜题。

真正的问题是当拼图变得有些大时,例如 9×9 或 11×11 的网格,以及大量的单词列表(几百或几千)。在构建拼图时尝试将每个单词放入未填充位置的蛮力方法是一种不可接受的解决方案——早期尝试使用这种方法 运行 在我取消它之前连续一周不间断,使用列表11×11 拼图需要 1,300 个单词(未生成拼图)。

所以我希望在构建拼图时使用正则表达式来过滤出适合拼图的可能单词。目前,我相信我只需要编写自己的代码来执行此搜索,但如果有人不这么认为,请赐教。

这是混合方法的一个很好的例子:使用简单的正则表达式生成候选匹配项,然后使用自定义逻辑自行过滤它们。

您可以在字符 class.So 中使用十六进制代码,一种方法是找到 </code> 或 <code>hex code 并将其放入 character class 中。您必须像这样

在 run.Something 上创建正则表达式

https://regex101.com/r/tX2bH4/57

这里 \x43C 很难 coded.But 你可以很容易地找到它,然后再替换它。

伪正则表达式可以是

^(.)([A-(hex code of )])([(hex code of )-Z])$

         ^^                   ^^

这些将被替换为查找 table 并获取 的十六进制代码的小代码。

在我看来,你用正则表达式做的任何事情最终都会比像这样的简单表达式更复杂(并且可能更难阅读):

s.length()==3 && s[0] >= s[1] && s[1] <= s[2]

...所以是的,在这种情况下,我认为您最好自己编写代码。

感谢大家的意见。我决定使用混合方法……例如,如果开头的假设表达式是:

"^(.)([A-])([-Z])$"

这样的表达式不是有效的正则表达式,必须用自定义代码处理,但是当第二个字母后来被知道是 I 时,表达式变为:

"^([I-Z])([I])([I-Z])$"

可用作匹配"PIT"或"SIT"的有效正则表达式。