我意识到反向引用不能在字符类中使用,但我需要这个功能。我想知道是否有替代的有效正则表达式可用于完成此操作。
前提:我使用的是 Visual Studio 2013。它必须在该环境中工作(即 std::regex)。
作为一个简化的示例,我希望执行的是在仅是大写罗马字母(即 AZ)的单词列表上进行搜索,例如假设表达式:
"^(.)([A-\1])([\2-Z])$"
理想情况下,这将返回匹配 3 个字母的单词,其中第二个字符在词法上小于或等于第一个字符,第三个字符在词法上大于或等于第二个字符。示例匹配将包括“CAT”和“EEL”,但不包括“COW”或“PIG”。
那么,是否有一个稍微简单的正则表达式(不包括 26×N 指数交替条件)可以做到这一点?还是我应该编写自己的代码来做到这一点?
附录:没有收到简化案例的替代有效正则表达式我相信可以回答我的问题,因为我只需要编写自己的代码来执行这样的搜索。
要了解现实世界的问题,我将在这里简单地指导您:
http://joeslater.orgfree.com/ZigWord/tutorial.html
该教程可能足以理解该问题,但提供了一些难题,当然欢迎您尝试。它们都是手工生成的。我需要我的程序使用可供选择的单词列表来生成这样的谜题。
真正的问题是当拼图尺寸变得有点大时,例如 9×9 或 11×11 的网格,以及大量的单词(几百或几千)。在拼图构建时尝试每个单词以适应未填充位置的蛮力方法是一个不可接受的解决方案 - 在我取消之前使用这种方法的早期尝试不间断地运行了一周,使用 1,300 个单词的列表作为11×11 拼图(未生成拼图)。
所以我希望在拼图构建时使用正则表达式来过滤掉适合拼图的可能单词。目前,我相信我只需要编写自己的代码来执行此搜索,但如果有人不这么认为,请赐教。